c# - asp.net mvc 3 首先使用 EF 代码验证 Id 字段

标签 c# asp.net-mvc-3 entity-framework-4 ef-code-first

我有以下模型:

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/

相关文章:

c# - 如何在 Xamarin.Forms 中创建底部工作表

c# - 在没有 Unity.MVC 的情况下解决 Unity 依赖关系

c# - 动态 HTML 内容 - "A potentially dangerous Request.Form value was detected from the client"

linq - CompiledQuery 与 List.Contains (where...in list) 功能?

entity-framework - 什么时候应该在 EF4 中使用 POCO?

c# - 无法在 Azure 应用程序洞察中获取进程 CPU

c# - 如何在 .NET 中使用 Restful 服务?

ASP.Net MVC 3 奇怪的 session 行为

asp.net-mvc-3 - 在 Windows Azure 上使用 ASP.NET MVC 3 应用程序显示 SSRS 报告

c# - 为什么我的 EF Code First 预生成 View 无效?