2009-12-14 27 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