アクションを呼び出して、そのアクションがビューに直接レンダリングされた結果の部分ビューを返すか、アクションがサーバー上の別のページにリダイレクトされるようにしたいと考えています。
ただし、jQueryを介してこれを行っているため、ページ/サイトをきれいにリダイレクトして効果的にリロードするのではなく、リダイレクトされたページをターゲットのdiv要素にロードするようです。
jQuery 呼び出し:
$.ajax({
type: "GET",
url: "Myurl",
dataType: "html",
success: function (data) {
// replace the context of the section with the returned partial view
$('#upload_section').html(data);
}
});
MVC アクションの例
public ActionResult MyAction()
{
bool doRedirect = // some code to determine this condition
if (doRedirect)
{
return RedirectToAction("MyAction", "Home");
}
else
{
// return the partial view to be shown
return PartialView("_UploadSessionRow");
}
}
私はこれをすべて間違っていますか?これを行うためのより良い方法はありますか? これを行う必要性は、他のアクションや jQuery リクエストで発生するため、これを行うための一般的な方法論を探しています。
更新: Andrews の回答のおかげで、彼の提案に従って、いくつかの変更を加えて ajax を変更することで、私が求めていたものを手に入れることができました。最終的な ajax は次のとおりです。
function loadOrRedirect(options) {
var jData = null;
try {
if (options.data) {
jData = $.parseJSON(options.data);
if (jData.RedirectUrl) {
window.location = jData.RedirectUrl;
}
}
} catch (e) {
// not json
}
if (!jData && options.callback) {
options.callback(options.data);
}
};
$.ajax({
type: "GET",
url: "Myurl",
dataType: "html",
success: function (data) {
loadOrRedirect(
{
data: data,
callback: function (html) {
replaceRow.replaceWith(html);
alternateRowHighlighting();
}
});
}
});