我有以下模型:
public class Product
{
[Key]
[HiddenInput(DisplayValue = false)]
public int Id { get; set; }
[Required]
[StringLength(10)]
public string ProductCode { get; set; }
[Required]
[StringLength(40)]
public string ProductName { get; set; }
}
以及 Controller 中的以下一对 Add 方法:
[HttpGet]
public ActionResult Add()
{
return View();
}
[HttpPost]
[ValidateInput(false)]
[ValidateAntiForgeryToken]
public ActionResult Add(Product product)
{
productRepository.Add(product);
return RedirectToAction("Index");
}
这是添加 View :
@using Models
@model Product
<h2>Add Product</h2>
@using (@Html.BeginForm("Add", "Home")) {
@Html.AntiForgeryToken()
@Html.EditorForModel()
<input type="submit" id="btnSubmit" value="Submit"/>
}
一切都显示得很好,不幸的是我无法提交表格。我花了一段时间才弄清楚 Id 字段得到了验证。事实上,如果我删除 HiddenInput
属性,我可以在提交时看到它告诉我 Id 字段是必需的。
有没有办法在仍然使用 EditorForModel()
的同时将其标记为不需要?
最佳答案
如果您必须将主键保留为模型的一部分,那么您需要覆盖 DataAnnotationsModelValidatorProvider
的默认值类型是必需的。将以下内容添加到 Global.asax.cs
中的 Application_Start 方法:
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new DataAnnotationsModelValidatorProvider());
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
关于c# - asp.net mvc 3 首先使用 EF 代码验证 Id 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7320821/