在没有Ajax的情况下从控制器返回asp.net MVC中的警报/消息?

时间:2017-04-12 14:44:10

标签: asp.net asp.net-mvc

在我的应用程序中,如果某人未成功登录,我想接收并返回类似JavaScript警报的内容以通知他们。问题是我不能使用Ajax调用来返回此JavaScript警报。有没有其他方法可以返回某种排序或警报或消息?

1 个答案:

答案 0 :(得分:0)

您可以存储要在TempData中显示的消息(在错误情况下在控制器内部)。然后返回要显示的视图。

public const string FlashMessageTempDataKey = "_flash";
controller.TempData[FlashMessageTempDataKey] = "The Message (Grandmaster Flash and the Furious Five)";

然后检查视图中是否存在TempData。

public static MvcHtmlString Flash(this HtmlHelper helper) {
    var message = helper.ViewContext.Controller.TempData[FlashMessageTempDataKey] as string;
    var sb = new StringBuilder();
    if (message != null) {
        sb.AppendLine("<script>");
        sb.AppendLine("$(function() {");
        sb.AppendFormat("flash('{0}');", HttpUtility.JavaScriptStringEncode(message));
        sb.AppendLine("});</script>");
     }
     return MvcHtmlString.Create(sb.ToString());
}

将此扩展方法用作@Html.Flash(),例如在你的_layout.cshtml中。它假设页面上有一些全局JS函数flash(message)和jQuery可以显示消息。

function flash(message) {
    alert(message);
}

请注意,使用此机制时,邮件将显示在用户加载的下一页上,这不一定是触发错误的页面(例如,如果他打开了多个浏览器标签页)。