如何在asp.net mvc中提供成功消息?
答案 0 :(得分:18)
如果您在ViewData
以外的其他页面上显示消息对您没有帮助,那么每次请求都会重新初始化消息。另一方面,TempData
可以存储两个请求的数据。这是一个例子:
public ActionResult SomeAction(SomeModel someModel)
{
if (ModelState.IsValid)
{
//do something
TempData["Success"] = "Success message text.";
return RedirectToAction("Index");
}
else
{
ViewData["Error"] = "Error message text.";
return View(someModel);
}
}
在if
块内,您必须使用TempData
因为您正在进行重定向(另一个请求),但在其他地方您可以使用ViewData
。
在内部视图中你可以有这样的东西:
@if (ViewData["Error"] != null)
{
<div class="red">
<p><strong>Error:</strong> @ViewData["Error"].ToString()</p>
</div>
}
@if (TempData["Success"] != null)
{
<div class="green">
<p><strong>Success:</strong> @TempData["Success"].ToString()</p>
</div>
}
答案 1 :(得分:12)
在你的控制器中,你可以这样做:
ViewData["Message"] = "Success"
在您的视图中,您可以检查是否有要显示的消息,如果有,则显示它:
@if (ViewData["Message"] != null)
<div>success</div>
答案 2 :(得分:2)
使用ViewData存储成功消息。在Controller中创建成功消息,并在View中检查它。如果存在,请渲染它。
答案 3 :(得分:2)
TempData可以像字典一样使用。 每个保存的值都持续当前和下一个请求。 非常适合重定向。
this.TempData["messages"] = "Success!";
return RedirectToAction("YourAction");
答案 4 :(得分:1)
您可以使用以下通用方法,以便通过一个实现即可显示成功/错误/信息/警告之类的所有消息,并且可以在任何页面中使用。
_Layout.cshtml
<!DOCTYPE html>
<html>
<head>
</head>
<body>
@if (TempData["UserMessage"] != null)
{
var message = (Models.Message) TempData["UserMessage"];
<div class="alert @message.CssClassName alert-dismissible fade show">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>@message.Title</strong> @message.DisplayMessage
</div>
}
@RenderBody()
</body>
</html>
控制器
[HttpPost]
public ActionResult ActionMethod(ViewModel vm)
{
if(ModelState.IsValid)
{
try
{
CommitData();
TempData["UserMessage"] = new Message() { CssClassName = "alert-success", Title = "Success!", DisplayMessage = "Data Saved" };
return RedirectToAction("Success");
}
catch(Exception e)
{
TempData["UserMessage"] = new Message() { CssClassName = "alert-danger", Title = "Error!", DisplayMessage = "Some Error Occured" };
return RedirectToAction("Error");
}
}
return View(vm); //return to view with model if model is not valid
}
答案 5 :(得分:0)
我倾向于将错误和成功存储在同一个数组/对象中,并将它们传递给视图。
由于我的大多数错误/成功消息都会出现在同一位置,并且通常不会同时出现,因此这通常不是问题。
我有一个名为ShowFeedback()
的函数,它被称为usercontrol并执行逻辑以确定要显示的内容。 HTML中的错误和成功标记相同,只有css有所不同。你可以拥有
<div id="feedback" class="error">
Your error message
</div>
或
<div id="feedback" class="success">
Your success message
</div>
答案 6 :(得分:0)
使用ViewData["success"]
或ViewData["error"]
例如:
public ActionResult saveResult()
{
var num = 1;
//After action was completed;
if ( num == 1 ) {
ViewData["success"] = "Action completed successfully";
}else{
ViewData["error"] = "OOps Action not completed";
}
return RedirectoAction("Index");
}
在您要检查提交是否成功的页面上
@if ( ViewData["success"] != null )
{
<div class="alert alert-success">@ViewData["success"]</div>
}
@if ( ViewData["error"] != null )
{
<div class="alert alert-error">@ViewData["error"]</div>
}