1

ログインが成功した場合にホームページを開くjavascriptリダイレクトがログオンコントローラーにあります:return JavaScript( "window.top.location ='" + returnUrl + "';")

私のログオンコントローラーは、Ajax.BeginForm内のsumbitによって部分ビューとして呼び出されます。

開発中(vs2010ではF5)、ソリューションは完全に機能しますが、公開されたバージョン(サーバーにアップロードしたもの)は完全に新しいビューを再作成するのではなく、targetidのdivを更新します。

私の部分ビューコード

@model Web.Models.LogOnModel
<div id="LogBox2">
@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "LogBox2",  }))
{         
<fieldset>...'All textbox capturing data here

            <input type="submit" value="LogOn" />           
</fieldset>
@Html.ValidationSummary(true, "Login was unsuccessful")
}
 </div>

私のコントローラーコード

 [HttpPost]
        public ActionResult LogOn(LogOnModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                if (Membership.ValidateUser(model.UserName, model.Password))
                {
                    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                    if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                      && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                    {
                        return JavaScript("location.href ='" + returnUrl + "';");
                    }
                    else
                    {
                        return RedirectToAction("Index", "Home");
                    }
                }
                else
                {
                    ModelState.AddModelError("", "The user name or password provided is incorrect.");
                }
            }

            // If we got this far, something failed, redisplay form
            if (Request.IsAjaxRequest())
            {
                // If an ajax request was made return only the validation errors 
                // instead of the whole page
                return PartialView("LogIn2"); 
            }
            else
            {
                return View();
            }
        }

デバッグ(F5)が機能する理由がよくわかりません。あなたは?よろしくお願いします

4

1 に答える 1

2

あなたのシナリオを完全に理解しているかどうかはわかりません。あなたの作品は正常に機能していると思います。シナリオを考えてみましょう: フォームが Ajax 経由で送信され、'returnUrl' が null/無効である場合、div 'LogBox2' はアクション 'Home/Index' 行の応答で更新されますreturn RedirectToAction("Index", "Home");

ログインが成功している間にユーザーをパス ' returnUrl ' または ' home/index ' にリダイレクトすることを意図している場合、1 つの解決策として行を置き換えることができます。

return RedirectToAction("Index", "Home");

return JavaScript("location.href =" + HttpUtility.JavaScriptStringEncode(Url.Action("Index", "Home"), true) + ";");

ASP.NET MVC で jQuery Ajax を使用することも検討できます。

于 2012-04-13T05:48:57.773 に答える