我正在构建我的第一个MVC4网站,我想在页面成功提交时显示成功消息。我通过使用ModelState.AddModelError(("", "Data successfully saved.");
实现了它,但它以红色显示。我想根据某些条件在运行时应用不同的css。
感谢。
答案 0 :(得分:1)
我建议使用TempData而不是更改validationsummary和@von描述得很好。使用bootstrap。你可以这样做:
<强>控制器强>
[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>
}
答案 1 :(得分:0)
通常,当动作方法的结果成功时,会发生重定向,也许这就是你想要的,特别是如果你的结果不是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。要了解更多关于两者的区别,您可以visit this SO page。
<强>更新强>
[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" : "" })
答案 2 :(得分:0)
我同意你不应该在帖子之后返回相同的视图,除非有错误,但我确实有时候人们可能想要动态更改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