2009-12-26 3 views
1

Я пытаюсь использовать возможности проверки в ASP.NET MVC 2 (RC)ASP.NET MVC 2 RC Validation проблема

У меня есть

ViewModel

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> 

<% } %> 

На представить это говорит поле идентификатор также требуется, но я не установлен атрибут необходимый.

Что я делаю неправильно или это ошибка? Это релиз RC, загруженный сегодня 26/12/09.

ответ

0

Если вы не хотите, чтобы пройти в Id, сделать его обнуляемым ... т.е .:

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

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

или не включать его вообще. Как вы планируете выполнять любое обновление базы данных без ID?

+0

Id будет автоматически генерируется дб. Id будет требоваться только при редактировании категории или присвоении категории другому связанному объекту. –

3

Ваш метод Create пытается создать новый CategoryPageViewModel из опубликованной коллекции форм.

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

Однако, как ваша форма содержит только вход для CategoryName, ваш метод управления не может создать новый CategoryPageViewModel, где требуется идентификатор.

У вас есть два решения вашей проблемы:

  1. Id сделать в CategoryPageViewModel обнуляемым как упомянуто @ Андрей.

    public int? Id { get; set; } 
    
  2. Рекомендуемое решение: Держите Id не обнуляемым, но делают это значение в вашей форме как скрытый вход. Это позволит вам сохранить системный идентификатор от контроллера для просмотра и возврата.

    В представлении добавить Id как скрытый вход, используя следующее:

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