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

时间:2014-01-02 14:08:48

标签: 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, 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
那我怎么样?

3 个答案:

答案 0 :(得分:3)

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

var jsUrl = '@Url.Action("##", "Home")'; // ## is the token
$.ajax({
    url: jsUrl.replace('##', someDynamicAction),
    ... 

(您可能需要对控制器执行相同操作)

修改

我的良心已经变得更好了 - 这样做并不是一个好主意,因为只会选择任何无效的操作名称(或ControllerAction名称中的更改)在运行时例如有404错误。

ajax所需的控制器和操作的数量应该是有限的,而T4MVC已经解决了这类问题。

您可以创建各种链接的网址:

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

然后为您的ajax调用选择适当的URL。 (T4MVC也有方法Url.JavaScriptReplacableUrlAjax.ActionLink,但情况略有不同)

答案 1 :(得分:3)

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

<强> _Layout.cshtml

<script>
    var app_root = '@Url.Content("~/")';
</script>

并在内容页面中使用

从_Layout.cshtml继承的any_page

 $.ajax({
     url: app_root + 'Home/Index', // or url: app_root + 'Home/' + x

答案 2 :(得分:0)

你的例子中有些奇怪,但我相信你要做的就是这个

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'是什么需要更多信息。