MVC,如何临时(5秒)显示带有消息的View,同时被重定向到另一个View

时间:2017-10-02 18:14:04

标签: asp.net-mvc partial-views asp.net-mvc-partialview

我有一个MVC应用程序。

我有一个View A,它呈现部分View _B。 视图A具有一个逻辑,用于定义何时显示部分视图_B以及何时不显示:

@if (!(bool)ViewData["PasswordChanged"])
{
    <div style="margin-top:20px;">

        <div>
            @Html.Partial("~/Views/_B.cshtml");
        </div>

    </div>
}
else
{
    <div id="redirect" style="margin-top:20px;">

        <div style="color:green;">
          @ViewBag.Message  
        </div>
        <div>
            Please wait while you are redirected...
        </div>    
    </div>  

我正在寻找能够帮助我显示重定向div 5秒然后重定向到主页View的解决方案。

以下是表单提交时调用的方法。在这个方法中,当我的withRedirect标志为真时,我可能需要有某种逻辑。目前,我只是重定向到MainPage,但我需要显示Redirection Success消息5秒钟。

[HttpPost]
public ActionResult Index(ChangePasswordModel model, string returnUrl*/)
{
    ViewData["PasswordChanged"] = false;
    bool withRedirect = Convert.ToBoolean(Session["WithRedirect"].ToString());
    if (ModelState.IsValid)
    {
        string currentPassword = model.CurrentPassword;
        string newPassword = model.NewPassword;
        string confirmPassword = model.ConfirmPassword;

        if (ChangePasswordModel.IsPasswordValid(newPassword))
        {
            try
            {
                ChangePasswordModel cpm = ChangePasswordModel.ChangePassword(model);
                if (cpm.SuccessMessage.Length > 0)
                {
                    ViewData["PasswordChanged"] = true;
                    ViewBag.Message = cpm.SuccessMessage;                         
                    if (withRedirect)
                    {
                        return Redirect(returnUrl ?? Url.Action("Index", "MainPage"));
                    }
                }
                else
                {
                    ModelState.AddModelError("", cpm.FailMessage);
                }

            }
            catch(Exception error)
            {
                ModelState.AddModelError("", error.Message);
            }
        }
        else
        {
            ModelState.AddModelError("", "New password does not meet minimum requirements");
        }
    }
    if (withRedirect)
    {
        return View("ForceChangePassword");
    }
    else
    {
        return View("ChangePassword");
    }         
}

我怎样才能在MVC中做类似的事情

1 个答案:

答案 0 :(得分:0)

在Controller中,重定向到呈现部分视图的视图:

if (withRedirect)
{
    return View("ViewA");
}

并在视图A中显示&#34;重定向&#34;我们可以通过

来做到这一点

1

<div style="margin-top:20px;">
    <div style="color:green;">
      @ViewBag.Message  
    </div>
    <div>
        Please wait while you are redirected...
        <script>
            window.setTimeout(function () {
                location.href = "MainPage";
            }, 5000);
        <script>
    </div>
 </div>

2

<div style="margin-top:20px;">
   <meta http-equiv="refresh" content="5;url=MainPage">
   <div style="color:green;">
      @ViewBag.Message  
   </div>
   <div>  
      Please wait while you are redirected...
   </div>
</div>