MVC 4中的自定义模型错误文本
本文关键字:模型 错误 文本 自定义 MVC | 更新日期: 2023-09-27 18:12:01
背景:我对MVC, c#和。net非常陌生。我在visual studio 2012中从MVC4互联网应用程序模板工作。
我想使用bootstrap的警报类来显示模型绑定错误,而不是使用Html.ValidationSummary()生成的无序列表。这是我拼凑出来的乱七八糟的东西:
StringWriter writer = new StringWriter();
foreach (ModelState state in ViewData.ModelState.Values) {
foreach (var error in state.Errors) {
writer.Write(error.ErrorMessage);
break;
// In this case the error messages are all the same,
// so I just break out when I get to the first one.
}
}
if (writer.ToString() != "") {
<div class="alert">@writer.ToString()</div>
}
在登录中。CSHTML视图,并在登录失败时弹出一个警告样式框。
有没有人对如何使用自定义html/css显示模型绑定错误有更好的建议?我只是在谷歌和猜测的基础上把这些拼凑在一起,任何建议都会非常感激。
发现了这个类似的问题:改变默认的ValidationSummary模板在MVC4
我不知道所提供的解决方案是否允许尽可能多的灵活性,但如果我错了,请告诉我。
您可以编写自定义html帮助器以任何您想要的方式显示验证错误。下面只是一个例子。
public static string MyValidationSummary(this HtmlHelper helper)
{
string errorMessage = string.Empty;
if (!helper.ViewData.ModelState.IsValid)
{
errorMessage += "<div class='alert'>";
foreach (var key in helper.ViewData.ModelState.Keys)
{
foreach(var err in helper.ViewData.ModelState[key].Errors)
errorMessage += "<span>" + helper.Encode(err.ErrorMessage) + "</span> <br>";
}
errorMessage += "</div>";
}
return errorMessage;
}
通过上面的帮助器,你可以用@Html.MyValidationSummary()
显示你的模型错误。没有测试代码,可能有错误
老实说,最灵活的方法是让控制器返回JSON。您使用ASP的次数越多。Net MVC,你就会越希望你有原始的JSON来工作。下面是一个人为的例子,其中
控制器代码类似于:
[HttpPost]
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public JsonResult Login(LoginView login)
{
if (!ModelState.IsValid)
{
var errors = ModelState.Select(kvp => kvp.Value.Errors.Select(e => e.ErrorMessage));
return Json(new { success = "false", message = errors });
}
//Perform whatever actions you need
// return Json(response);
}
并在成功上执行一个函数,类似于:
@using (Ajax.BeginForm("Login", "Home", new AjaxOptions
{
HttpMethod = "POST",
OnBegin = "loginBegin",
OnSuccess = "loginSuccess"
}))
{
//You could create this modelview elsewhere and add any properties you need
var login = new InputLoginView();
login.rememberme = true;
//form code here
}
其中loginSuccess是一个Javascript函数,类似于:
function loginSuccess(result) {
if (result.success) {
window.location = result.returnurl;
}
else {
//whatever actions you want to take
$('#login_password').val('');
$('#login-btn').button('reset');
var msg = new alertMsg();
msg.title = 'Login Problem';
msg.body = result.message;
$('#alertError').trigger('show', msg);
}
}