如何在MVC中隐藏警报消息

时间:2015-11-26 11:28:17

标签: javascript jquery asp.net-mvc

我是jQuery和MVC的新手。我有一个登录方案,当用户名或密码错误时显示alert条消息。我使用ViewData将消息从控制器传递到视图并通过javascript显示警报消息。

单击“登录”按钮后,警告消息会显示UserName/Password is wrong. Please try again并显示“确定”按钮。单击“确定”按钮将关闭弹出窗口。当我按下注册新用户时,它会导航到注册页面,但当我按下返回按钮进入登录屏幕时,警告消息会再次显示在登录屏幕上。以下是我正在使用的代码。

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        var result = _proxy.Get<LoginResult>(string.Format("{0}api/Login/Login?userName={1}&password={2}", ConfigurationUtils.GetValue("ApplicationServiceUri"), model.UserName, model.Password));

        if (result.Success)
        {
        }
        else
        {
            TempData["alertMessage"] = result.Message;
            return View();
        }
    }

    return View(model);
}

我的浏览脚本是:

$(document).ready(function () {             
    var success = @((TempData["alertMessage"] != null).ToString().ToLower());
    debugger;
    if (success == true) {
        var status = '@TempData["alertMessage"]';
        var wnd = $("#window");
        $(".spn-login-message").text(status);
        if (!wnd.data("kendoWindow")) {
            wnd.kendoWindow({
                modal: true,
                title: "Login",

                close: function () {
                    $(".open-button").show();
                },
                visible: false
            });
        }
        var dialog = $("#window").data("kendoWindow");
        dialog.center();
        wnd.data("kendoWindow").open();
        $(this).hide();

        $(".btn-primary").click(function () {
            // call 'close' method on nearest kendoWindow
            $(this).closest("[data-role=window]").kendoWindow("close");
        });
    }
    else{
        $("#btnOK").hide();

    }
});

我担心的是当按下页面刷新或后退按钮导航到登录页面时如何隐藏警告消息。 提前致谢。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我建议您使用Post-Redirect-Get pattern described here

所以在你的情况下,你会这样做:

 if (result.Success)
    {
    }
    else
    {
        TempData["alertMessage"] = result.Message;
        RedirectToAction("Login");
    }

请注意,我们正在重定向(将执行get),而不是返回视图。如果用户刷新,那么他们将刷新获取而不是帖子。

答案 1 :(得分:0)

我已经完成了这种情况。感谢所有人:)

以下是我的代码。

jQuery(document).ready(function($) {

            if (window.history && window.history.pushState) {

                $(window).on('popstate', function() {
                    var hashLocation = location.hash;
                    var hashSplit = hashLocation.split("#!/");
                    var hashName = hashSplit[1];

                    if (hashName !== '') {
                        var hash = window.location.hash;
                        if (hash === '') {

                        }
                    }
                });

                window.history.pushState('forward', null, './#forward');
            }