我的MVC3应用程序中有一个“创建”页面,其中包含4个输入字段,这些字段都是必需的。我还有一个“编辑”页面,其中可以编辑这4个字段中的3个。我不想显示第4个字段,并希望将其保持在初始值(字段是创建条目的日期)。
我在模型中将第4个字段标记为[Required],然后这会导致模型在Edit字段的post action方法中声明为无效。如果我省略[Required]注释,那么有人可以为第4个字段创建一个空值的用户。
如何解决这个问题?
型号代码:
[Required]
[DisplayName("User Name")]
public string UserName { get; set; }
[Required]
public string Role { get; set; }
[Required]
[DataType(DataType.Date)]
[DisplayName("Insert Date")]
public DateTime? InsertDate { get; set; }
[Required]
[DisplayName("Active")]
public bool ActiveInd { get; set; }
控制器代码:
public ActionResult Edit(int id, ZUserRoleModel mod)
{
if (ModelState.IsValid)
{
// code removed
return RedirectToAction("Index");
}
return View(mod);
}
答案 0 :(得分:1)
您可以在编辑模式中隐藏该字段。
@Html.HiddenFor(x => x.EntryDate)
答案 1 :(得分:1)
不确定您是否仍需要答案,但是您需要做什么才能
@Html.HiddenFor(x => x.EntryDate )
工作,将现有模型传递到视图中。因此,我们假设您获取用户数据的操作如下所示。 (你没有提供它,所以我不确定这是否正确)
Public ActionResult GetUser(int UserID)
{
ZUserRoleModel model = new ZUserRoleModel(UserID);
// Maybe this could go to your database and gather user
// It would populate the correct data into a model object
return View("Edit", model);
}
通过组合隐藏字段,您的视图将使用现有用户信息填充,隐藏字段将填充数据,并将传递给您的编辑操作。
注意:我在没有任何测试的情况下写了这个,但它仍然有用,或者至少,如果你仍然需要帮助,我希望它指出你正确的方向。
答案 2 :(得分:0)
您可以使用流利验证:http://fluentvalidation.codeplex.com/
有一个类似
的规则RuleFor(user => user.field4).NotEmpty().When(ViewContext.Controller.ValueProvider.GetValue("action").RawValue <> "edit")