Asp.net mvc 在Url.action javascript中提供动态操作名称

Asp.net mvc 在Url.action javascript中提供动态操作名称,asp.net-mvc,asp.net-mvc-4,jquery,Asp.net Mvc,Asp.net Mvc 4,Jquery,我想通过javascript在Url.action中提供动态动作名称 // I want to change Index name by dynamic $.ajax({ url: '@Url.Action("Index", "Home")', type: "Post", data: { Surveyid: surveyid, Catego

我想通过javascript在Url.action中提供动态动作名称

// I want to change Index name by dynamic
      $.ajax({
                        url: '@Url.Action("Index", "Home")', 
                        type: "Post",
                        data: { Surveyid: surveyid, Category: catcode },
                        success: function (data) {
                            window.location.href = data.Url
                        }

var x=“xxxx”

@Url.Action(x,"Home") -> not working throws error

@Url.Action(x.toString(),"Home") -> not working

那我该怎么办呢?

Url。操作是由服务器生成的,而您似乎想更改浏览器上的操作。您可以做的是标记化操作,获取
Url.Action
以生成标记化的Url,然后在js中替换它:

var jsUrl = '@Url.Action("##", "Home")'; // ## is the token
$.ajax({
    url: jsUrl.replace('##', someDynamicAction),
    ... 
(您可能需要对控制器执行相同操作)

编辑

我的良知战胜了我-这样做不是一个好主意,因为任何无效的操作名称(或
控制器
操作
名称的更改)将仅在运行时被拾取,例如404错误

ajax需要的控制器和操作的数量应该是有限的,并且已经解决了这类问题

您可以创建指向各种链接的URL:

var urlToIndex = '@Url.Action(MyControllerAssembly.Index.Home())))';
var urlToOtherAction = ...
... etc for all actions needed in the 'switch' for ajax call.

然后为ajax调用选择合适的URL。(T4MVC也有方法
Url.JavaScriptReplacableUrl
Ajax.ActionLink
,尽管用于稍有不同的场景)

在您的示例中有些奇怪的地方,但我相信您试图做的就是这样

function axajThis(numberthing,path) {

    var newUrl = "htttp://somplace/"+path; 
     /* and what ever the number x is doing */
      $.ajax({
         url: newUrl, 
         type: "Post",
         data:  .... 
       });
    };
 }

 axajThis(x,"Home");

关于“x”是什么,需要更多的信息。

在mvc应用程序中使用url的最佳方法是在布局页面中定义一个全局应用程序url,如下所示:

\u Layout.cshtml

<script>
    var app_root = '@Url.Content("~/")';
</script>
 $.ajax({
     url: app_root + 'Home/Index', // or url: app_root + 'Home/' + x

“x”是客户端变量还是服务器变量?如果“x”是客户机变量,您不能在服务器代码(Url.Action)中使用它。不,所有内容都是客户端的。我指的是x和Url.Action,所有内容都是客户端的