ASP.NET MVC 2 RC проблема проверки - PullRequest
       31

ASP.NET MVC 2 RC проблема проверки

1 голос
/ 26 декабря 2009

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

У меня есть

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>

<% } %>

При отправке говорится, что поле id также обязательно, но я не установил обязательный атрибут.

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

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

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

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

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

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

  1. Сделайте Id в CategoryPageViewModel обнуляемым, как упомянул Эндрю.

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

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

    <%= Html.Hidden("Id") %>
    
0 голосов
/ 26 декабря 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...