Asp.net mvc 在Url.action javascript中提供动态操作名称
我想通过javascript在Url.action中提供动态动作名称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
// 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,所有内容都是客户端的