ASP.Net MVC и сообщения о проверке - PullRequest
0 голосов
/ 18 июня 2009

Я пытаюсь разобраться с сообщениями валидации в ASP.Net MVC. У меня есть следующий вид

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"  Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Create User</h2>

    <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>

    <% using (Html.BeginForm()) {%>

        <fieldset>
            <legend>Fields</legend>
            <p>
                Username : <%= Html.TextBox("Username") %>
            </p>
            <p>
                Forename : <%= Html.TextBox("Forename") %>
                <%= Html.ValidationMessage("Forename", "*") %>
            </p>
            <p>
                Surname : <%= Html.TextBox("Surname","") %>
                <%= Html.ValidationMessage("Surname", "*") %>
            </p>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% } %>

    <div>
        <%=Html.ActionLink("Back to List", "Index") %>
    </div>

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server">
    <title><%= ViewData["ProjectTitle"] %> - Create User</title>
</asp:Content>

У меня в контроллере есть этот метод post, который должен отображать сообщение об ошибке, если поле фамилии пустое, я понимаю, что в этой функции нет другой логики, я просто пытаюсь получить подтверждение.

  [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(FormCollection formValues)
    {
        if (formValues["Surname"] == string.Empty)
            ViewData.ModelState.AddModelError("Surname", "No way");
        return View("Create");
    }

Когда я запускаю это и нажимаю, чтобы сохранить пользователя, метод Create работает нормально и добавляет ошибку, но затем приложение падает, оно выделяет строку в представлении, которое создает текстовое поле фамилии и говорит: «Не задан экземпляр объекта ". Он работает нормально, если я помещаю что-то в текстовое поле фамилии, и ошибка не добавляется.

Полагаю, я упускаю что-то очень простое, но могу понять что.

Есть идеи?

Спасибо

Gavin

Ответы [ 3 ]

1 голос
/ 18 июня 2009

Вы пытались удалить второй аргумент в TextBox? Он будет искать пустой ключ во ViewData.

строка ниже

Surname : <%= Html.TextBox("Surname","") %>

должно быть похоже на

Surname : <%= Html.TextBox("Surname") %>
0 голосов
/ 19 июня 2009

Вы должны проверить значение Null или empty в вашем операторе if,

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(string Username, string Surname,  string Forename)
{
  if (String.IsNullOrEmpty(Surname))
  {
     ModelState.AddModelError("Surname", "No way");
  }

  return View();
}
0 голосов
/ 19 июня 2009

Я думаю, что нашел решение, добавив строку setModelValue ниже к моему методу выше строки, которая устанавливает ошибку, заставляет ее работать.

            ModelState.SetModelValue("Username", new ValueProviderResult(ValueProvider["Username"].AttemptedValue, formValues["Username"], System.Globalization.CultureInfo.CurrentCulture));
            ModelState.AddModelError("Username", "Invalid Username");

Если бы кто-нибудь мог объяснить, почему это работает, это было бы замечательно, Если нет, я приму этот ответ завтра. Я бы предпочел не делать это навсегда в поле, которое я проверяю, если только мне это не нужно.

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