我想知道在同一视图模型中处理可编辑/只读字段的最佳做法是什么。对于更大的 ViewModel,我正面临这个问题,但假设我有一个非常简单的 ViewModel:
public class BaseListViewModel
{
public int Id { get; set; }
public bool IsCheckedForAction { get; set; }
public string DisplayName { get; set; }
}
我的部分视图:
@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 中?
最好的方法是什么?谢谢!
编辑:如果验证失败,我试图避免重新查询数据