同じviewModelで編集可能/読み取り専用フィールドを処理するためのベストプラクティスは何でしょうか。私はより大きなViewModelでこの問題に直面していますが、非常に単純な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は入力されません。いくつかの検証が失敗し、DisplayNameが欠落していると受け取ったデータを返すと仮定しましょう。
[HttpPost]
public ActionResult Edit(BaseListViewModel stuff)
{
if (ModelState.IsValid)
{
...
return View("Index");
}
return View(stuff);
}
私はこれを修正するいくつかの方法があることを知っています:
1)追加
@Html.HiddenFor(model => model.DisplayName)
ビューでは、フィールドが1つしかない場合は問題ありませんが、表示専用フィールドが10ある場合はどうなりますか?
2)[HttpPost]のif(!Model.isValid)のデータを再クエリします。
3)TempDataにキャッシュできると思いますか?
これを行うための最良の方法は何ですか?ありがとう!
編集:検証が失敗した場合にデータを再クエリする必要を回避しようとしています