私は私の部分的なビューで次のjqueryを書いています:
$.ajax({
type: "POST",
url: '@Url.Action("PostActionName", "ControllerName")',
data: { Id: "01" },
success: function(data)
{
if (data.success="true")
{
window.location = '@Url.Action("GetActionName", "ControllerName")'
}
}
});
アクション名とコントローラー名は固定されていません。これらは、この部分ビューが配置されているビューに応じて変更される必要があります。呼び出しアクションとコントローラー名を取得する関数はありますが、@ Url.Actionでそれらを渡す方法がわかりません。
以下は、アクション名とコントローラー名を取得するJavaScript関数です。
function ControllerName() {
var pathComponents = window.location.pathname.split('/');
var controllerName;
if (pathComponents.length >= 2) {
if (pathComponents[0] != '') {
controllerName = pathComponents[0];
}
else {
controllerName = pathComponents[1];
}
}
return controllerName;
}
function ActionName() {
var pathComponents = window.location.pathname.split('/');
var actionName;
if (pathComponents.length >= 2) {
if (pathComponents[0] != '') {
actionName = pathComponents[1];
}
else {
actionName = pathComponents[2];
}
}
return actionName;
}
呼び出しアクションとコントローラー名を取得する関数はありますが、@ Url.Actionにそれらを渡す方法がわかりません
さて、これらの関数を呼び出すことができます。たとえば、UrlHelperクラスの拡張メソッドである場合:
window.location = '@Url.Action(Url.MyFunction1(), Url.MyFunction2())'
または、それらが単なる静的関数である場合:
window.location = '@Url.Action(SomeClass.MyFunction1(), SomeClass.MyFunction2())'
一方、渡す必要がある値がクライアントでのみ認識されている場合は、次のことができます。
var param = 'some dynamic value known on the client';
var url = '@Url.Action("SomeAction", "SomeController", new { someParam = "__param__" })';
window.location.href = url.replace('__param__', encodeURIComponent(param));
更新:
あなたは現在のコントローラーとアクションを取得しようとしているようです。
@{
string currentAction = Html.ViewContext.RouteData.GetRequiredString("action");
string currentController = Html.ViewContext.RouteData.GetRequiredString("controller");
}
その後:
window.location.href = '@Url.Action(currentAction, currentController)';
このようなことを試しましたか?私は自分で試したことはありませんが、うまくいくはずです。
var dataToSend = "01";
var url = '/controllerName/actionName/' + dataToSend;
var actionName = ActionName();
var controllerName = ControllerName();
url.replace("actionName",actionName);
url.replace("controllerName",controllerName);
window.location = url;
function functionName(var1, var2) {var link = '@Url.Action("MethodName", "Controller", new { id = "-1", name = "-2" })';
link = link.replace("-1", var1);
link = link.replace("-2", var2);}
前に、交換してください:
html += "<a class='k-button k-button-icontext k-primary' href='" + link + "'><i class='fa fa-download'></i> Name Button</a>"