目前在模型类级别上,我已经从模型绑定器中排除了任何不应由用户定义的属性,例如 CreatedDate 或任何导航属性对象。
所以在我的模型类中,我定义了以下BIND
列表。这将不允许用户(甚至黑客)包含 CreatedDate 字段的值,并且该值只会在创建对象时在系统代码内设置。所以我没有将它包含在绑定列表中,如下所示:-
[MetadataType(typeof(Group_validation))]
[Bind(Include="Description,GroupID,Name")]
public partial class Group
{
但问题是在 POST Edit 操作方法中,我有以下代码:-
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Group group)
{
try
{
if (ModelState.IsValid)
{
groupRepository.InsertOrUpdate(group);
groupRepository.Save();
return RedirectToAction("Index");
}
}
catch (DbUpdateConcurrencyException ex)
{
var entry = ex.Entries.Single();
var clientValues = (Group)entry.Entity;
这将引发错误,因为 CreateDate 字段是必需的,并且我将其从模型活页夹中排除?那么如何从模型绑定器中排除 CreateDate ,但同时避免空异常?
我知道我可以将 objectID 传递给 Edit 操作方法,但这会阻止 DbUpdateConcurrencyException 被触发。所以我必须将 Group 对象传递给编辑操作方法,就像我在上面的代码中所做的那样。