我如何提供asp.net mvc的成功消息?

时间:2011-03-04 05:09:25

标签: c# asp.net-mvc

如何在asp.net mvc中提供成功消息?

7 个答案:

答案 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)

您可以使用以下通用方法,以便通过一个实现即可显示成功/错误/信息/警告之类的所有消息,并且可以在任何页面中使用。

enter image description here

_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">&times;</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>
}