ASP.NET MVC Простая проверка моей формы не удается - PullRequest
0 голосов
/ 30 ноября 2009

У меня есть простое поле с текстовым полем, в котором пользователь вводит адрес RSS-канала. Я не буду действовать, если поле пустое, это моя разметка:

<%=Html.ValidationSummary() %>
    <table>
        <tr>
            <td>
                Feed Url:
            </td>
            <td>
                <%=Html.TextBox("url", null, new {@style="width:300px"}) %>
            </td>
        </tr></table>

Мой контроллер тоже очень прост:

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult AddFeed(FormCollection collection)
    {
        string url = collection.Get("url");
        string roles = collection.Get("Roles");
        if (string.IsNullOrEmpty(url))
        {
            ModelState.AddModelError("url", "Please provide a propre feed url");
        }
        if (string.IsNullOrEmpty(roles))
        {
            ModelState.AddModelError("Roles", "Please select a valid role");
        }
        if (ModelState.IsValid)
        {
            Session["url"] = url;
            Session["Roles"] = roles;
            return RedirectToAction("ValidateFeed");
        }
        else
        {
            return View();
        }
    }

Когда это терпит неудачу, он перезагружает представление и делает исключение в строке, где он отображает мое текстовое поле, говоря, что было исключение нулевого указателя. Это действительно беспокоит меня, это должно быть так просто ... но я все еще борюсь

/ H4mm3r

Редактировать Пожалуйста, не обращайте внимания на элемент Роли, у меня есть выпадающий список, но для простоты он удален из разметки

Ответы [ 2 ]

0 голосов
/ 30 ноября 2009

Вы, вероятно, не можете использовать нуль при использовании помощника HTML. Попробуйте это в своей форме вместо:

<%= Html.TextBox("url", String.Empty, new {@style="width:300px"}) %>

Я не проверял это, но это первое, что я бы попробовал, учитывая это сообщение об ошибке.

0 голосов
/ 30 ноября 2009

Я думаю, что вы не можете использовать ModelSate, если вы не сделали что-то вроде:

UpdateModel(collection);

или

TryUpdateModel(collection);

или привязкой параметров

public ActionResult AddFeed(YourModelType collection)

Поскольку состояние модели не связано ни с одной моделью.

Как говорится в справочнике MSDN:

ModelState Class

Инкапсулирует состояние модели привязка к свойству аргумент метода действия или сам аргумент.

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