2009-12-14 90 views
2

我有一个视图模型,其中有两个属性是可选的 - 即 - 不是必需的。该视图使用dropdownlistfor()来获取这两个字段的值,一个包含空白值的选项标签“”。MVC2验证 - “需要一个值”

当发回到创建操作时,ModelState对于这两个字段都有一个错误,表示“需要一个值”。

任何人有任何线索,如果这是一个错误或一个愚蠢的用户(即我)的错误?

感谢

UDPATE:

视图模型看起来是这样的: [DisplayName的( “校验位类型”) 公共VMBarcodeMaskCheckDigitType BarcodeMaskCheckDigitType { 搞定; 集; }

[DisplayName("Mask Type")] 
    [Required(ErrorMessage="Mask type is required")] 
    public VMBarcodeMaskType BarcodeMaskType 
    { 
     get; 
     set; 
    } 

    [DisplayName("Product")] 
    public VMProduct Product 
    { 
     get; 
     set; 
    } 

在控制器的结合是:

public ActionResult Create() 
     { 
      BarcodeMaskViewModel model = new BarcodeMaskViewModel(new VMBarcodeMask(), Domain.GetBarcodeMaskTypes(), Domain.GetBarcodeCheckDigitTypes(), Domain.GetProducts()); 
      return View(model); 
     } 

     // 
     // POST: /Barcode/Create 

     [HttpPost] 
     public ActionResult Create(BarcodeMaskViewModel model) 
     { 
      try 
      { 
       if (ModelState.IsValid) 
       { 

... 
       } 

      } 
      catch (Exception ex) 
      { 
       ModelState.AddModelError("*", ex); 
      } 
      return View(new BarcodeMaskViewModel(model.BarcodeMask, Domain.GetBarcodeMaskTypes(), Domain.GetBarcodeCheckDigitTypes(), Domain.GetProducts())); 
     } 
+0

你使用什么验证技术?我假设DataAnnotation验证属性?你可以发布这个视图模型和绑定的代码吗? – Charlino 2009-12-14 02:18:15

+0

下面是查看模型的相关部分: [DisplayName(“Check Digit Type”)] public VMBarcodeMaskCheckDigitType BarcodeMaskCheckDigitType { get; 集; } [DisplayName的( “掩码类型”)] [必需的(的ErrorMessage = “蒙片类型是必需的”)] 公共VMBarcodeMaskType BarcodeMaskType { GET; 集; } [DisplayName(“Product”)]] public VMProduct Product { get; 集; } – Jonesie 2009-12-14 03:13:31

回答

0

我有这个问题太,我发现它实际上是无关的可选字段。 这是因为我有一个实体的自动生成主键列,名为'Id'。 MVC2自动为此检查了一个值,显然没有一个是自动生成的。

有一个简单的方法可以解决这个问题,就是将列重命名为BarcodeId等,而不仅仅是Id。我给这里一个更好的解释:http://www.ediblecode.com/post/A-value-is-required-with-ASPNET-MVC-2.aspx

这说明所有假设你使用LINQ ...

+0

哎唷,那很讨厌。在我的情况下,我使用LightSpeed作为数据层(这是令人敬畏的顺便说一句),它坚持Id。我的视图模型对象也有Id,我使用automapper在两者之间移动。我将在视图模型中重命名Id并更改映射来处理此问题。 干杯 – Jonesie 2009-12-14 16:43:35

+0

不幸的是,没有工作:( – Jonesie 2009-12-14 16:51:44

0

绑定(不包括=“ID”)的创建行动的第一个参数之前,只要使用。

+0

对不起,这也行不通。我对Id没有问题,但使用ProductId和BarcodeMaskTypeId。我试图排除这些,但没有奏效。我目前的解决方法是忽略来自这两个字段的任何模型错误。 – Jonesie 2010-01-13 18:42:46