asp.net mvc добавление проверки приводит к тому, что Model будет нулевым - PullRequest
2 голосов
/ 04 августа 2009

Я только что закончил свой первый сайт asp.net mvc, но я не был доволен надежностью проверки.

Я прочитал о проверке, а затем добавил следующий код к своему действию Edit в моем UsersController:

  if (user_.firstname.Trim().Length == 0)
        {
            ModelState.AddModelError("firstname", "First Name is required.");
            return View();
        }

Я только что проверил это, и теперь у меня возникают ошибки в моем представлении, где Модель нулевая.

<% using (Html.BeginForm())
   {%>
<fieldset>
    <legend>Fields</legend>
    <p>
        <label for="Email">
            Login Name:
            <%= Model.loginName%>
        </label>
    </p>
    <p>

Таким образом, в приведенной выше модели нулевое значение, поэтому я получаю исключение для Model.loginName. Любая идея, что здесь происходит. Если я удаляю приведенный выше код (проверка), все работает нормально. (кроме того, что я могу положить мусор в свою базу данных.

Ответы [ 4 ]

4 голосов
/ 04 августа 2009

Смотрите мой ответ на похожую тему.

Проверка формы с использованием ModelState

Каждый раз, когда вы добавляете ошибку модели в ModelState и снова вызываете View, инфраструктура MVC asp.net пытается найти указанное значение. Также ваш View должен возвращать объект user_ вашему строго типизированному View.

if (user_.firstname.Trim().Length == 0)
{
    ModelState.AddModelError("firstname", "First Name is required.");
    ModelState.SetModelValue("firstname", ValueProvider["firstname"]);

    return View(user_);
}
1 голос
/ 11 августа 2009

Я добавил модель в метод возврата, и теперь она начала работать.

Спасибо за ответ.

Вернуться Просмотр (contactToEdit);

1 голос
/ 04 августа 2009

Вы получаете нулевую ошибку модели, потому что вы не передаете модель в представление ... что-то мешает вам сделать это?

* 1003 Е.Г. *

if (user_.firstname.Trim().Length == 0)
{
    ModelState.AddModelError("firstname", "First Name is required.");
    return View(user_);
}

Хотя это должно работать как обходной путь ... вы действительно должны хорошо посмотреть, как работает ваша проверка. Валидация действительно должна выполняться в другом месте, кроме контроллера, например, я положил всю свою валидацию в саму модель.

0 голосов
/ 04 августа 2009

В вашем контроллере вы должны добавить перегруженные методы:

    public ViewResult UpdateUser()
    {
        return View();
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult UpdateUser(user data)
    {
         if (user_.firstname.Trim().Length == 0)
         {
            ModelState.AddModelError("firstname", "First Name is required.");
            return View();
         }
         return View();
    }

С этим решением ваша модель во втором методе не будет нулевой

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