jquery ajax を使用して、新しい製品を作成 (入力) するための部分ビューをレンダリングするアクションを呼び出し (取得) します。この部分ビューのコンテンツは、ベース _layout を持つフル ページの vid タグに挿入されます。以下のajaxコード:
$("#Create").on('click', function (e) {
//debugger;
e.preventDefault();
$.ajax({
type: "GET",
data: { returnUrl: String(window.location) }, <-- passing in the Url
url: "/CreateGroup/CreateGroup",
dataType: 'html',
success: function (data) {
$("#group-list").html(data);
},
});
})
.....
<div id="group-list">
@Html.Partial("PagedGroupList")
</div>
アクション:
// GET: /Create/
[Authorize]
public PartialViewResult CreateGroup(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
CreateGroupModel cgm = new CreateGroupModel();
cgm.ReturnUrl = returnUrl;
cgm.group = new Static_Group();
return PartialView("CreateGroup", cgm);
}
作成ボタンをクリックする前に最初にログインすると、期待どおりにすべてがうまくいきます。問題は、最初にログインせずに CREATE ボタンをクリックした場合です。[Authorize] により、ログイン ページが最初に表示され、ログイン後、フル ページ内の CREATE partialview に一緒にリダイレクトされることが期待されます。問題は、ログイン ページが、親ビューの要素なしで NAKED の create partialview にリダイレクトされることです。CREATE ページが部分ビューでない場合、ログイン ページはフル ページに完全にリダイレクトされます。
MVC4 デフォルト ログインを使用します。ログインページをajaxフォームサブミットにして、OnSuccessを使ってログインページとパーシャルビューの作成の両方でdocument.locationを呼び出そうとしたのですが、パーシャルビューのreturnUrlの問題であることがわかりました。私も Request.UrlReferrer.AbsoluteUri を試してみましたが、「/CreateGroup/CreateGroup?returnUrl=http%3A%2F%2Fwww.dev.com%3A22531%2F」または完全な同じ URL が返されます: http://www .dev.com:22531/CreateGroup/CreateGroup?returnUrl=http://www.dev.com:22531/ . URL をブラウザーに入力すると、純粋な部分ビューも表示されます。
これは一般的なシナリオであるはずですが、グーグルでスレッドを見つけることができませんでした。親ビュー内の部分ビューを一緒に表示する URL はありますか? そうでない場合、部分ビューから前のビューにリダイレクトすることは可能ですか?
ホスト ページを含むパーシャルビューの URL がないようです。現時点で考えられる解決策は、ホストページへのログインリダイレクトを取得し、モデルまたはビューバッグまたはセッション一時に部分ビュー名を渡して、適切な部分ビューを含むページ全体を再度レンダリングすることです。