我想通过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
那我怎么样?
答案 0 :(得分:3)
Url.Action
是服务器生成的,而您似乎想要更改浏览器上的操作。您可以做的是对Action进行标记,获取Url.Action
以生成标记化的URL,然后在js中替换它:
var jsUrl = '@Url.Action("##", "Home")'; // ## is the token
$.ajax({
url: jsUrl.replace('##', someDynamicAction),
...
(您可能需要对控制器执行相同操作)
修改强>
我的良心已经变得更好了 - 这样做并不是一个好主意,因为只会选择任何无效的操作名称(或Controller
或Action
名称中的更改)在运行时例如有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.JavaScriptReplacableUrl
和Ajax.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'是什么需要更多信息。