2009-12-26 138 views
1

我想使用ASP.NET MVC的驗證能力2(RC)ASP.NET MVC 2 RC驗證問題

我有一個

視圖模型

public class CategoryPageViewModel 
{ 

      public int Id { get; set; } 

      [Required(ErrorMessage="Category name required")] 
      public string CategoryName { get; set; } 
} 

動作

[HttpPost()] 
    public ActionResult Create(CategoryPageViewModel categoryModel) 
    { 
     if (ModelState.IsValid) 
     { 
      return View("Completed"); 
     } 
     return View(categoryModel); 

    } 

視圖

<%= Html.ValidationSummary() %> 

<% using (Html.BeginForm("Create", "Category", FormMethod.Post)) {%> 

    <fieldset> 
     <legend>Create new category</legend> 
     <p> 
      <label for="CategoryName">Category name:</label> 
      <%= Html.TextBox("CategoryName") %> 
      <%= Html.ValidationMessage("CategoryName", "*")%> 
     </p> 

     <p class="submit"> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 

<% } %> 

在提交時,它說還需要ID字段,但我還沒有設置必要的屬性。

我在做什麼錯,或者它是一個錯誤?這是今天26/12/09下載的RC版本。

回答

0

如果你不想在標識傳遞,使其可爲空...即:

public class CategoryPageViewModel 
{ 
      public int? Id { get; set; } 

      [Required(ErrorMessage="Category name required")] 
      public string CategoryName { get; set; } 
} 

或不包括它在所有。您如何期望在沒有ID的情況下執行任何類型的數據庫更新?

+0

ID將被由分貝自動生成。僅在編輯類別或將類別分配給其他相關對象時才需要Id。 – 2009-12-26 13:23:53

3

您的Create方法正試圖從發佈的表單集合構造一個新的CategoryPageViewModel

public ActionResult Create(CategoryPageViewModel categoryModel){...} 

然而,隨着你的形式只包含CategoryName輸入,控制器方法不能建立在需要ID的新CategoryPageViewModel

有兩種解決問題的方法:

  1. 充分利用IdCategoryPageViewModel可空爲@Andrew提及。

    public int? Id { get; set; } 
    
  2. 推薦的解決方案:保存ID不爲空,但呈現在您的形式此值作爲隱藏的輸入。這將允許您保持您的系統ID完好無損地從控制器查看並返回。

    在視圖添加Id如使用以下一個隱藏的輸入:

    <%= Html.Hidden("Id") %>