我正试图掌握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方法,如果surname字段为空,我应该显示一条错误消息,我意识到这个函数中没有其他逻辑我只是试图让我的头部验证。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formValues)
{
if (formValues["Surname"] == string.Empty)
ViewData.ModelState.AddModelError("Surname", "No way");
return View("Create");
}
当我运行它并单击以保存用户时,Create方法运行正常并添加错误,但随后应用程序崩溃,它会突出显示创建姓氏文本框的视图中的行并显示“未设置为实例对象“。如果我在姓氏文本框中添加了一些内容并且没有添加错误,那么它运行正常。
我猜我错过了一些非常简单但可以解决问题的东西。
有什么想法吗?
由于
加文
答案 0 :(得分:1)
您是否尝试删除TextBox上的第二个参数?它将在ViewData中查找空键。
以下一行
Surname : <%= Html.TextBox("Surname","") %>
需要像
Surname : <%= Html.TextBox("Surname") %>
答案 1 :(得分:0)
我想我找到了一个解决方案,将下面的setModelValue行添加到我设置错误的行上方的方法中。
ModelState.SetModelValue("Username", new ValueProviderResult(ValueProvider["Username"].AttemptedValue, formValues["Username"], System.Globalization.CultureInfo.CurrentCulture));
ModelState.AddModelError("Username", "Invalid Username");
如果有人能够解释为什么这样做会很好,如果不是我会接受这个答案tommorow。除非我真的需要,否则我宁愿不必为永远的领域做这件事。
答案 2 :(得分:-1)
您应该在if语句中测试Null或为空,
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(string Username, string Surname, string Forename)
{
if (String.IsNullOrEmpty(Surname))
{
ModelState.AddModelError("Surname", "No way");
}
return View();
}