Проблема проверки 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 также требуется, но я не установил атрибут Required.

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


person eb.    schedule 26.12.2009    source источник


Ответы (2)


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

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

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

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

  1. Сделайте Id в CategoryPageViewModel обнуляемым, как упоминал @Andrew.

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

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

    <%= Html.Hidden("Id") %>
    
person steelcm    schedule 09.11.2011

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

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

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

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

person Andrew    schedule 26.12.2009
comment
Идентификатор будет автоматически сгенерирован БД. Id потребуется только при редактировании категории или присвоении категории другому связанному объекту. - person eb.; 26.12.2009