具有动态操作的ASP.NET MVC RouteUrl

时间:2013-02-13 03:48:43

标签: javascript asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4

我尝试在javascript中使用带有动态字符串的URLHelp.RouteUrl。我想用这种方式 -

function MyFun(action, param){
   var strPass = "MyController/" + action + "?param1=" + param;
   Windows.Location.href = "<%=Url.RouteUrl(" + strPass + ")%>";
}

它不起作用。我错过了什么吗?我们在ASP.NET MVC中有替代方式以类似的方式工作吗?

谢谢,

其他信息 -

我尝试上述方式,因为我的应用程序出现问题 - 当我使用"http://myserver/myapplicaiton/mycontroller/myaction"时,主页面"Windows.Location.href ="MyController/MyAction"正确返回。但是下一页有双控制器出现"http://myserver/myapplication/mycontroller/mycontroller/myaction" 导致此路由问题的原因是什么?

4 个答案:

答案 0 :(得分:3)

这不起作用。在html页面到达浏览器之前,Razor语法呈现。 Javascript执行后。

因此,您尝试使用第2步填充第1步。

   function MyFun(action, param){          
       Windows.Location ="/MyController/" + action + "?param1=" + param;
    }

答案 1 :(得分:2)

尝试使用此代码

   function MyFun(action, param){          
       Windows.Location.href ="/MyController/" + action + "?param1=" + param;
    }

答案 2 :(得分:0)

一旦代码离开服务器,就无法动态地将剃刀代码添加到视图中...... Razor不会在客户端浏览器上编译。

您可以使用jQuery并对Controller / Action进行$ .ajax()调用,其唯一目的是返回一个URL:

public ActionResult GenerateUrlFromRoutingEngine(string ControllerName, string ActionName, string RouteValues) 
{
    var ctx = new HttpContextWrapper(HttpContext.Current);
    UrlHelper helper = new UrlHelper(
                           new RequestContext(ctx,
                           RouteTable.Routes.GetRouteData(ctx));
    var returnUrl = helper.Action(ControllerName,ActionName, RouteValues); //TODO: transform RouteValues to RouteValuesDictionary
    return Content(returnUrl);
}

在$ .ajax回调中,设置Windows.Location.href = response; (将此javascript放在razor .cshtml文件中或找到直观传递URL的方法。)

function MyFun(action, param){
    $.ajax({
            type: "POST", 
            url: "@{Html.RouteLink("GenerateUrlFromRoutingEngine", "MyController")}",
            data: { ControllerName: 'MyController', ActionName: action, RouteValues: param },
            dataType: "text",
            success: function(response) { Windows.Location.href = response; }
            }
}

答案 3 :(得分:0)

我最终获得了一个获取整个网址的功能 -

函数FullURL(){

var app = "<%=HttpRuntime.AppDomainAppVirtualPath.ToString()%>";

if (app == "/")
    app = "";

return location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '') + app;

}

然后从 -

调用它
 function MyFun(action, param){          
       Windows.Location =FullURL() + "/MyController/" + action + "?param1=" + param;
    }