나는ViewModel에 바인딩 할 때 모델을 업데이트하는 방법은 무엇입니까?
[HttpPost]
public ActionResult Edit(ExistingPostViewModel model)
{
// Save the edited Post.
}
이제는 과거에 (예 : R & D와 같이 ViewModels를 사용하지 않았을 때) 구현을했다. 메서드를 다음과 같이 수정했다. :
[HttpPost]
public ActionResult Edit(Post model)
{
var existingPost = repo.Find(model.Id);
TryUpdateModel(existingPost);
repo.Save(existingPost);
return RedirectToAction("Success", existingPost.Id);
}
정말 잘됐다.
하지만 ViewModel 방식에 위의 방법을 적용하는 방법을 혼란스러워합니다.
내가 이렇게하면 :
TryUpdateModel(existingPost)
내 ViewModel 방식으로,별로 발생하지 않습니다. MVC는 ExistingPostViewModel
에서 Post
를 업데이트하는 방법을 알지 못하기 때문에 (Post
->Post
이전에는) 오류가 발생하지 않지만 아무것도 업데이트되지 않습니다.
이제 AutoMapper를 사용하고 있습니다. 그래서 ViewModel에서 Post
로 매핑 한 다음 게시물을 저장할 수 있다고 생각했습니다.
하지만 기본적으로 모든 것을 무시하고 있습니다. 내가 싫어하고 ViewModel을 잘라내는 것의 핵심을 무너 뜨리고 싶습니다.
누구든지 나를 혼란스럽게 할 수 있습니까?
이것은 정말 일반적인 시나리오처럼 보입니다. 사람들이 어떻게 이것을 해결하는지에 관해서는 완전히 혼란 스럽습니다. 가능한 해결책은 세 가지뿐입니다.
HTTP POST에서 ViewModel을 사용하지 마십시오. 내가 R & D에 대해 이것을 과거에했다고 말했기 때문에 작동하지만, 이제는 내 View의 진화 (검증, 단순성)를 보았습니다.이 문제를 위해 타협 할 수는 없습니다.
TryUpdateModel을 사용하지 마십시오. 가능할지 모르지만 어떻게 변경 사항을 병합합니까?
왼쪽에서 오른쪽으로 쓰기. 응. 하지만 지금이 순간이 기울고있는 것처럼 보입니다.
누군가 제게 해결책 4를주세요! :)
안녕, 난 ASP.NET MVC 3, 면도기 및 엔티티 프레임 워크를 사용하고 있습니다.
Noooo :) 나는 왼쪽에서 오른쪽으로 할 때마다 신경 쓰지 않는다. 그러나 이것은 모든 업데이트 페이지가 그것을 할 필요가 있음을 의미한다. 이를 위해 일반적으로/간단한 방법이 있어야합니다. 모든보기에서 ViewModel을 사용합니다. 따라서 데이터베이스를 업데이트해야하는 모든보기에는 L-R이 필요합니다. 게다가 숨겨진 필드도 필요합니다. 내 머리가 아파요 .... ( – RPM1984
누군가 다른 사람이 와서 더 좋은 방법이 있다고 말하면서 기다리고 있었지만, 그렇지 않은 것 같아요. (+1하고 받아 들였습니다.) – RPM1984