如何在@ Url.Action中传递动态值?

我在部分视图中写了以下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中传递它们

好吧,你可以调用这些function。 例如,如果它们是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 += " Name Button"