ASP.NET MVC3アプリケーションでは、ビューにボタンがあります。
ボタンがクリックされると関数が呼び出され、jquery ajax呼び出しが行われてデータベースにアイテムが保存されます
_ function SaveMenuItems() {
var encodeditems = $.toJSON(ids);;
$.ajax({
type: 'POST',
url: '@Url.Action("SaveItems", "Store")',
data: 'items=' + encodeditems + '&[email protected]',
complete: function () {
}
}
});
}
_
アイテムがデータベースに保存された後、別のビューにリダイレクトする必要があります。 (アクションにリダイレクト)
どうやってやるの?
SaveItems
関数の最後のコントローラーでreturn RedirectToAction("Stores","Store")
を使用しようとしました。しかし、それは機能していません
また、ajax呼び出しの完全な関数にwindow.location.replace("/Store/Stores");
を追加しようとしましたが、どちらも機能しませんでした
どんな助けでも大歓迎です
どうもありがとう
JavaScriptを使用して、新しいページにリダイレクトできます。 window.location.href
の値をajax呼び出しのsuccess
/complete
イベントの新しいURLに設定します。
var saveUrl = '@Url.Action("SaveItems","Store")';
var newUrl= '@Url.Action("Stores","Store")';
$.ajax({
type: 'POST',
url: saveUrl,
// Some params omitted
success: function(res) {
window.location.href = newUrl;
},
error: function() {
alert('The worst error happened!');
}
});
またはdone
イベント
$.ajax({
url: someVariableWhichStoresTheValidUrl
}).done(function (r) {
window.location.href = '@Url.Action("Stores","Store")';
});
上記のコードは、Url.Action
ヘルパーメソッドを使用して、アクションメソッドへの正しい相対URLを作成しています。 JavaScriptコードが外部JavaScriptファイル内にある場合は、アプリのルートへのURLを作成し、それを外部のJSファイル内のスクリプト/コードに渡し、それを使用して この投稿 。
パラメータを渡しますか?
一部のクエリ文字列パラメーターを新しいURLに渡したい場合は、ルート値を受け入れるUrl.Action
メソッドの this overload を使用して、クエリ文字列でURLを作成できます。
var newUrl = '@Url.Action("Stores","Store", new { productId=2, categoryId=5 })';
ここで、2と5は他の実際の値に置き換えることができます。
これはhtmlヘルパーメソッドであるため、かみそりビューでのみ機能し、外部のjsファイルでは機能しません。コードが外部jsファイル内にある場合は、urlクエリ文字列パラメーターを手動で作成する必要があります。
アクションメソッドへの正しいURLを生成するために、mvcヘルパーメソッドを利用することは常に良い考えです。アクションメソッドから、リダイレクトする新しいURLのプロパティを持つjson構造体を返すことができます。
これを行うには、コントローラ内でUrlHelper
クラスを使用できます。
[HttpPost]
public ActionResult Step8(CreateUser model)
{
//to do : Save
var urlBuilder = new UrlHelper(Request.RequestContext);
var url = urlBuilder.Action("Stores", "Store");
return Json(new { status = "success", redirectUrl = url });
}
Ajax呼び出しのsuccess
/done
コールバックで、戻り値を確認し、必要に応じてリダイレクトします。
.done(function(result){
if(result.status==="success")
{
window.location.href=result.redirectUrl;
}
else
{
// show the error message to user
}
});
実際にこれを書くことができます:
if(Request.IsAjaxRequest()) {
return JavaScript("document.location.replace('"+Url.Action("Action", new { ... })+"');"); // (url should be encoded...)
} else {
return RedirectToAction("Action", new { ... });
}
試す
window.location = "/Store/Stores";
代わりに。