我正在构建我的第一个 MVC4 网站,我想在页面成功提交时显示成功消息。我已经通过使用实现了, ModelState.AddModelError(("", "Data successfully saved.");
但它显示为红色。我想根据某些条件在运行时应用不同的 css。
谢谢。
我正在构建我的第一个 MVC4 网站,我想在页面成功提交时显示成功消息。我已经通过使用实现了, ModelState.AddModelError(("", "Data successfully saved.");
但它显示为红色。我想根据某些条件在运行时应用不同的 css。
谢谢。
我建议使用 TempData 而不是更改验证摘要,@von 很好地描述了它。使用引导程序。你可以这样做:
控制器
[HttpPost]
public ActionResult ManageUsers(UserViewModel model)
{
if (ModelState.IsValid)
{
User obj = new User();
obj.UserName = model.Email;
obj.FirstName = model.FirstName;
obj.LastName = model.LastName;
obj.Email = model.Email;
obj.Phone = model.Phone;
obj.Notes = model.Notes;
obj.Authorized = model.Authorized;
UserRepository.SaveUser(obj);
TempData["Success"] = "Yes";
}
return View(model);
}
看法
@Html.ValidationSummary()
@if (TempData["Success"] != null)
{
<div class="alert alert-success">
<a href="#" class="close" data-dismiss="alert">×</a>
<strong>Success!</strong> The User account was created.
</div>
}
通常,当操作方法的结果成功时,会发生重定向,也许这就是您想要的,特别是如果您的结果不是 json 结果。但是,如果您在发布后返回相同的视图,那么您做错了。如果在ModelState
帖子上有效,即如果验证通过(例如提供了必填字段),并且您通过添加错误消息,ModelState.AddModelError(("", "Data successfully saved.")
那么您将ModelState
进入无效状态。这就是为什么你有红色的原因。
现在假设你真的想返回相同的视图,那么我想你有类似的东西:
[HttpPost]
public ActionResult YourActionMethod(YourModel model)
{
// some code goes here
ModelState.AddModelError(("", "Data successfully saved.")
return View(", model);
}
你应该拥有的是这样的:
[HttpPost]
public ActionResult YourActionMethod(YourModel model)
{
// some code goes here
ViewBag.SuccessMessage = "Data successfully saved.";
return View(", model);
}
然后在你看来是这样的:
@Html.ValidationSummary(true)
if (!string.IsNullOrWhiteSpace(ViewBag.SuccessMessage)) {
<div class="success-summary">
<p>@ViewBag.SuccessMessage</p>
</div>
}
请注意,您不需要@
在 if 之前添加额外内容,该代码假定它在form
标签内,使用@using
. 然后对于CSS:
.success-summary {
color: #3366FF;
}
您实际上可以使用 ViewData 或 ViewBag。要了解更多关于两者的区别,您可以访问这个 SO 页面。
更新:
[HttpPost]
public ActionResult YourActionMethod(YourModel model)
{
//
If (ModelState.IsValid) {
@ViewBag.IsModelValid = true;
ModelState.AddModelError("", "Data successfully saved.");
return View(model);
}
ViewBag.SuccessMessage = "Data successfully saved.";
return View(", model);
}
您的看法:
@Html.ValidationSummary(false, "", new { @class= (ViewBag.IsModelValid!=null && ViewBag.IsModelValid) ? "success-summary" : "" })
冯,我也很欣赏你的回答,但我同意 MaxPayne 的观点,即你没有完全提供这个问题的答案,更多的是围绕 IMO 的工作。我也在寻找一种无需使用 ViewBag 的额外包袱来设计 ValidationSummary 的方法。
我同意您不应该在发布后返回相同的视图,除非出现错误,但我确实相信有时人们可能想要动态更改 ValidationSummary 样式而不必使用 ViewBag。
到目前为止,这是我唯一的领导http://westcountrydeveloper.wordpress.com/2011/07/06/mvc-validation-part-4-styling-the-validation-controls/
我想您可以使用一些 JQuery 根据验证响应更改元素的 css 属性。
var valid = $("#formID").validate().element("#ElementID");
//or
var valid = $('#formID').validate();
// Then use $(".ElementClass").css({}); to change the the style