Csharp/C#教程:首先使用EF代码对Id字段进行asp.net mvc 3validation分享


首先使用EF代码对Id字段进行asp.net mvc 3validation

我有以下型号:

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; } } 

以及控制器中的以下一对Add方法:

 [HttpGet] public ActionResult Add() { return View(); } [HttpPost] [ValidateInput(false)] [ValidateAntiForgeryToken] public ActionResult Add(Product product) { productRepository.Add(product); return RedirectToAction("Index"); } 

这是添加视图:

 @using Models @model Product 

Add Product

@using (@Html.BeginForm("Add", "Home")) { @Html.AntiForgeryToken() @Html.EditorForModel() }

一切都显示得很好,不幸的是我无法提交表格。 我花了一段时间才弄清楚Id字段是否经过validation。 实际上,如果我删除HiddenInput属性,我可以看到提交它告诉我需要Id字段。

有没有办法在仍然使用EditorForModel()时将其标记为不需要?

如果必须将主键作为模型的一部分,则需要覆盖DataAnnotationsModelValidatorProvider的默认值,即需要值类型。 将以下内容添加到Global.asax.cs的Application_Start方法:

 ModelValidatorProviders.Providers.Clear(); ModelValidatorProviders.Providers.Add(new DataAnnotationsModelValidatorProvider()); DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 

您应该考虑使用视图模型,而不是将域实体作为模型发送到视图。

 public class ProductAddModel { [Required] [StringLength(10)] public string ProductCode { get; set; } [Required] [StringLength(40)] public string ProductName { get; set; } } 

然后使用AutoMapper之类的工具将viewmodel映射回您的域模型

上述就是C#学习教程:首先使用EF代码对Id字段进行asp.net mvc 3validation分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 [HttpPost] [ValidateInput(false)] [ValidateAntiForgeryToken] public ActionResult Add(ProductAddModel productAddModel) { if (ModelState.IsValid) { Product product = Mapper.Map(productAddModel); productRepository.Add(product); } return RedirectToAction("Index"); } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1012664.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐