0

我尝试在 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

4 回答 4

3

这是行不通的。Razor 语法在 html 页面到达浏览器之前呈现。Javascript 之后执行。

因此,您正在尝试使用步骤 2 填充步骤 1。

   function MyFun(action, param){          
       Windows.Location ="/MyController/" + action + "?param1=" + param;
    }
于 2013-02-13T04:00:23.823 回答
2

试试这个代码

   function MyFun(action, param){          
       Windows.Location.href ="/MyController/" + action + "?param1=" + param;
    }
于 2013-02-13T03:59:20.953 回答
0

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

您可以使用 jQuery 并调用 $.ajax() 来调用 Controller/Action,其唯一目的是为您返回一个 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; }
            }
}
于 2013-02-13T04:02:43.357 回答
0

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

功能完整网址(){

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;
    }
于 2013-02-14T03:04:43.993 回答