3

getメソッドでログインするためのアクションメソッドがあります:

public virtual ActionResult LogIn()
{
    return View();
}

そして、Ajax.BeginForm() を使用して Ajax 呼び出しで投稿する Post メソッドのアクション メソッドは、次のようになります。

[HttpPost]
[AjaxOnly]
[ValidateAntiForgeryToken]
public virtual ActionResult LogIn(LogInViewModel loginInfo, string returnUrl)
{
   ...
}

しかし、returnUrl は常に null です!!!

私はMVC 4を使用しています。

この問題の原因は何ですか?

4

3 に答える 3

8

returnUrlをサーバーに返送する必要があります。たとえば、ログインフォームはreturnUrlをパラメータとして受け取る必要があります。

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
    ....
    <input type="submit" value="Log in" />
}

これは以前にログインアクションでサーバー側に保存され、クエリ文字列で渡されたReturnUrlを使用したAuthorizeAttributeの使用の結果として呼び出されました。

public ActionResult Login(string returnUrl)
{
    ViewBag.ReturnUrl = returnUrl;
    return View();
}
于 2012-11-21T18:47:23.533 に答える
0

@Jaroslaw Waliszkoの完了の良い答えを続けるには、この問題の原因は次のとおりです。

送信フォームに ajax リクエストを使用しているため、控えめな ajax の使用

$("form").serialize();

このフォームとこの場合(ajaxを使用)ReturnUrl(およびその他のパラメーター)はサーバーに送信されず、フォーム入力要素のみがサーバーに送信されるため、MVC Auto ModelBindingはReturnUrlをバインドせず、この状態で@Jaroslaw Waliszkoソリューションを使用する必要があります。

シリアライズ

一連のフォーム要素を送信用の文字列としてエンコードします。

于 2013-05-03T18:05:40.063 に答える