我很好奇如何做到这一点,我想为论坛和从控制器到视图的常规视图发送自定义错误消息(因此寻找两者的示例)。我已经看到 ModelState.AddError()
我希望如何控制能够将其包装在前端 div 中的错误消息的外观。
有任何想法吗?
我对 ASP.net 很陌生,那里的教程对我来说似乎很混乱。所以我真的没有任何代码可以显示,因为我不确定我应该做什么。
我很好奇如何做到这一点,我想为论坛和从控制器到视图的常规视图发送自定义错误消息(因此寻找两者的示例)。我已经看到 ModelState.AddError()
我希望如何控制能够将其包装在前端 div 中的错误消息的外观。
有任何想法吗?
我对 ASP.net 很陌生,那里的教程对我来说似乎很混乱。所以我真的没有任何代码可以显示,因为我不确定我应该做什么。
我相信您正在寻找自定义视图上的错误消息。您可以通过ModelState.AddModelError("", "error message")
三种方式自定义错误消息,包括您添加的错误消息。
通过类使用Html.ValidationSummary()
和自定义其外观validation-summary-errors
。VS 中默认的 mvc 项目模板将默认包含该类。它的默认颜色为红色(我认为)。但是您实际上可以通过更改该类来控制错误摘要的各个方面。
.validation-summary-errors {
border: 5px solid red; // thick red border
color: #3904D9; // dark blue
font-size: 1.5em; // quite big fonts
font-weight: bold;
}
以ValidationSummary
无序列表 ( li
) 输出消息。如果您的项目要求以不同的方式显示错误消息,您可以通过检查ViewDataDictionary
. 以下代码会将错误消息写入带有细红色边框的单独 div 中。样式是内联编写的,以使示例简单。
@foreach (var item in ViewData.ModelState) {
if (item.Value.Errors.Any()) {
foreach (ModelError e in item.Value.Errors) {
<div style="border: 1px solid red;margin-bottom:5px;">
@e.ErrorMessage</div>
}
}
}
如果您不想在视图中添加逻辑,则可以扩展 htmlhelper(或创建自定义帮助器)。您基本上将在自定义 htmlhelper 中使用选项 2 中显示的相同逻辑。
public static class HtmlExtensions {
public static MvcHtmlString CustomValidationSummary(this HtmlHelper helper)
{
var html = string.Empty;
foreach (var item in helper.ViewData.ModelState)
{
if (item.Value.Errors.Any()) {
foreach (ModelError e in item.Value.Errors) {
html
+= "<div style='border: 1px solid red;margin-bottom:5px;'>"
+ e.ErrorMessage
+ "</div>";
}
}
}
return MvcHtmlString.Create(html);
}
}
然后以与使用相同的方式使用它ValidationSummary
:
@Html.CustomValidationSummary()
您可能想要查看该ViewBag
对象。如果您ViewBag.ErrorMessage
在控制器中设置,它将在您的视图中作为字符串提供。而且,实际上,您可以随意命名它,而不仅仅是 ErrorMessage。
添加这个并在您的视图中包含逻辑以仅显示如果!string.IsNullOrEmpty(ViewBag.ErrorMessage)
并且您应该是好的。
这只是多种方法中的一种。ViewBag
只是 的一个包装器ViewData
,所以如果你被卡住了,你可能还想查看那个对象。
虽然这个答案并不全面,但希望它能给你一个起点。
祝你好运!!