동일한 viewModel에서 편집 가능/읽기 전용 필드를 처리하는 가장 좋은 방법은 무엇일까 궁금합니다. 나는 더 큰 뷰 모델이 문제에 직면하지만이 전 매우 간단한 뷰 모델이 가정하자 해요 :편집 가능한 및 읽기 전용 데이터 모범 사례가있는 MVC ViewModel
이public class BaseListViewModel
{
public int Id { get; set; }
public bool IsCheckedForAction { get; set; }
public string DisplayName { get; set; }
}
내 PartialView : 나는 내 데이터를 게시 할 때
분명히@model Wims.Website.ViewModels.Shared.BaseModelListViewModel
@using Wims.Website.Classes.Helpers.ExtentionMethods
<div class="dataDetail">
<div>
<div class="float-left">
@Html.CheckBoxFor(model => model.IsCheckedForAction)
</div>
<div class="float-left">
@Html.LabelFor(model => model.IsCheckedForAction, Model.DisplayName)
@Html.GenerateSecureDataControls(w => w.Id)
</div>
</div>
</div>
<div style="clear: both"></div>
, 표시 이름이되지 않습니다를 채우는. 일부 유효성 검사가 실패했다고 가정하고 DisplayName이 누락 된 데이터를 반환합니다.
[HttpPost]
public ActionResult Edit(BaseListViewModel stuff)
{
if (ModelState.IsValid)
{
...
return View("Index");
}
return View(stuff);
}
내가 아는이이 문제를 해결하는 몇 가지 방법입니다 경우 발생하는, 그냥 1 필드의 경우
이1) 괜찮 뷰에
@Html.HiddenFor(model => model.DisplayName)
를 추가,하지만 난 10 개의 표시 전용 필드가 있습니까?
2) [HttpPost]에서 (! Model.isValid) if requery data.
3) 내가 TempData에서 캐시 할 수있을 것 같습니까?
이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 감사합니다.
편집 : 나는 유효성 검사가
안녕하세요, 답변을 주셔서 감사합니다. 이러한 게시물이 내 ViewModel Readyonly 데이터를 채우는 데 어떻게 도움이되는지 이해할 수 없습니까? 내가 다른 상태로 보내려면 modelState 오류를 유지할 수 있음을 이해합니다. 내 질문에 게시되지 않은 데이터를 내 ViewModel에 유지하는 것이 더 중요합니까? – Tom
왜? GET 작업에서 ViewModel을 한 번 만듭니다. theGET의 [RestoreModelStateFromTempData] 속성에서 복원을 넣습니다. POST에 [SetTempDataModelState]를 입력하십시오. 그런 다음 ModelState 유효성 검사가 실패하면 다시 GET으로 리디렉션됩니다. 새로운 ViewModel을 만들고 나서 제출 된 데이터와 유효성 검사 오류를 병합합니다 – GraemeMiller
안녕하세요, 포기하지 마시고 고마워요 :) 당신이 말하는 것을 이해하고 있다고 생각하지만 피하려고하는 것은 데이터베이스로 돌아갑니다 (그리고 예, 나는 두 번째 GET에서 다시 언급하지 않았습니다.) 내가 뭘 할 수 있고, 어쩌면 그것은 (느린 것에 대해 유감스럽게 생각한다면 :)) 당신이 방금 쓴 것을하고, 첫 번째 Get 후에 TempData에 전체 ViewModel을 추가하고, PRG 패턴에서 TempData를 가져온다. 다시 고마워 – Tom