MVC 客户端错误消息未显示
MVC client side error message not showing
我想在我的表单上实施客户端验证,但是当我输入错误的数据时 none 显示错误消息。下面是我的模型代码:
型号:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace LayoutProject.Models
{
public class Book
{
public int BookId { get; set; }
[Required]
public String Title { get; set; }
public String Author { get; set; }
}
}
我的部分观点:
@model LayoutProject.Models.Book
<h4>Books</h4>
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<table>
<tr>
<td>@Html.LabelFor(d=>d.BookId)</td>
<td>@Html.TextBoxFor(d=>d.BookId)</td>
</tr>
<tr>
<td>@Html.LabelFor(d=>d.Title)</td>
<td>@Html.TextBoxFor(d=>d.Title)
@{ Html.ValidateFor(d => d.Title); }
@Html.ValidationMessageFor(d=>d.Title, "", new { @class = "text-danger" })
</td>
</tr>
<tr>
<td>@Html.LabelFor(d=>d.Author)</td>
<td>@Html.TextBoxFor(d=>d.Author)</td>
</tr>
</table>
查看:
@{
ViewBag.Title = "CreateBooks";
}
<h2>CreateBooks</h2>
<form action="/Home/SaveBooks" method="post">
@Html.Partial("_CreateBook")
<input id="createBook" type="submit" value="Submit"/>
</form>
我的控制器:
[HttpPost]
public ActionResult SaveBooks(Book book)
{
if (ModelState.IsValid)
{
//write code to update student
return RedirectToAction("Index");
}
return View(book);
}
我已经在我的布局中添加了所需的脚本:验证和不显眼的脚本。但是每当我提交表单时,标题字段为空,这是一个必填字段,它进入控制器并且没有显示错误消息。知道什么可能导致此错误吗?
我是否也需要添加所有这些脚本:
<script src="@Url.Content("~/Scripts/jquery-1.5.1.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.js")" type="text/javascript"></script>
<script src="../../Scripts/jquery-1.5.1-vsdoc.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate-vsdoc.js" type="text/javascript"></script>
<script src="@Url.Content("/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
我没有看到您设置了任何验证消息,因此没有要显示的消息。这可能是您问题的解决方案。
[Required(ErrorMessage = "Your Error message here")]
并且在您的 cshtml 视图中,不要覆盖上面设置的 ErrorMessage,请执行以下操作:
@Html.ValidationMessageFor(d=>d.Title, null, new { @class = "text-danger" })
@Html.ValidationMessageFor(d=>d.Title, "", new { @class = "text-danger" })
此处您将验证消息设置为:“”。
如果您将其更改为:
@Html.ValidationMessageFor(d=>d.Title, null, new { @class = "text-danger" })
应该可以。
编辑 1:
在模型中保留 [Required]。
当模型无效时,您 return 在控制器的错误视图中。
将 return View(book);
更改为 return View("the_actual_view", book);
我想在我的表单上实施客户端验证,但是当我输入错误的数据时 none 显示错误消息。下面是我的模型代码:
型号:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace LayoutProject.Models
{
public class Book
{
public int BookId { get; set; }
[Required]
public String Title { get; set; }
public String Author { get; set; }
}
}
我的部分观点:
@model LayoutProject.Models.Book
<h4>Books</h4>
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<table>
<tr>
<td>@Html.LabelFor(d=>d.BookId)</td>
<td>@Html.TextBoxFor(d=>d.BookId)</td>
</tr>
<tr>
<td>@Html.LabelFor(d=>d.Title)</td>
<td>@Html.TextBoxFor(d=>d.Title)
@{ Html.ValidateFor(d => d.Title); }
@Html.ValidationMessageFor(d=>d.Title, "", new { @class = "text-danger" })
</td>
</tr>
<tr>
<td>@Html.LabelFor(d=>d.Author)</td>
<td>@Html.TextBoxFor(d=>d.Author)</td>
</tr>
</table>
查看:
@{
ViewBag.Title = "CreateBooks";
}
<h2>CreateBooks</h2>
<form action="/Home/SaveBooks" method="post">
@Html.Partial("_CreateBook")
<input id="createBook" type="submit" value="Submit"/>
</form>
我的控制器:
[HttpPost]
public ActionResult SaveBooks(Book book)
{
if (ModelState.IsValid)
{
//write code to update student
return RedirectToAction("Index");
}
return View(book);
}
我已经在我的布局中添加了所需的脚本:验证和不显眼的脚本。但是每当我提交表单时,标题字段为空,这是一个必填字段,它进入控制器并且没有显示错误消息。知道什么可能导致此错误吗?
我是否也需要添加所有这些脚本:
<script src="@Url.Content("~/Scripts/jquery-1.5.1.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.js")" type="text/javascript"></script>
<script src="../../Scripts/jquery-1.5.1-vsdoc.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate-vsdoc.js" type="text/javascript"></script>
<script src="@Url.Content("/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
我没有看到您设置了任何验证消息,因此没有要显示的消息。这可能是您问题的解决方案。
[Required(ErrorMessage = "Your Error message here")]
并且在您的 cshtml 视图中,不要覆盖上面设置的 ErrorMessage,请执行以下操作:
@Html.ValidationMessageFor(d=>d.Title, null, new { @class = "text-danger" })
@Html.ValidationMessageFor(d=>d.Title, "", new { @class = "text-danger" })
此处您将验证消息设置为:“”。 如果您将其更改为:
@Html.ValidationMessageFor(d=>d.Title, null, new { @class = "text-danger" })
应该可以。
编辑 1: 在模型中保留 [Required]。
当模型无效时,您 return 在控制器的错误视图中。
将 return View(book);
更改为 return View("the_actual_view", book);