Url.RouteUrl in js

时间:2013-10-29 12:01:23

标签: javascript asp.net-mvc-3 url-routing

我有一种情况需要在ASP.NET MVC网站的javascript中跳转网址。

我们知道,我们可以在xx.cshtml中使用@ Url.RouteUrl(“RouteName”,new {params})生成网址。现在我想在javascript中以相同的方式生成url,是否可能?

我试过了:

window.location.href ='@ Url.RouteUrl(“RouteName”,new {param1 =“'+ param +'”})%>'。

然而,它不起作用。

我的路线:

routes.MapRoute(
            "ListOfTicketAB",
            "piao/{citystart}-{cityend}",
            new { controller = "Tickets", action = "ListS2S", traintype = 0, sorttype = 0, page = 1 },
            new { citystart = "[a-zA-Z0-9]+", cityend = "[a-zA-Z0-9]+" });

我的js:

var selectS;var selectE;function SearchClick(obj) {

        location.href = '@Url.RouteUrl("ListOfTicketAB",new {citystart="' + selectS+ '",cityend="' + selectE+ '"})';

}

selectS和selectE将在其他一些函数中设置。

有了上面,我收到了错误:

'/'应用程序中的服务器错误。

路径中的非法字符。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentException:路径中的非法字符。

来源错误:

在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

1 个答案:

答案 0 :(得分:1)

  

现在我想在javascript中以相同的方式生成url,是否可能?

不,javascript文件无法执行服务器端Razor语言。

您可以做的是在视图中将此网址生成为全局javascript变量,或者将HTML5 data- *属性生成为稍后可在javascript文件中访问的某些现有DOM元素:

<script type="text/javascript">
    var myUrl = '@Url.RouteUrl("ListOfTicketAB", new { citystart = "_start_", cityend = "_end_" })';
</script>

然后在您的javascript中将2个占位符替换为现有javascript变量selectSselectE的相应值:

var selectS;
var selectE;

function SearchClick(obj) {
    var url = myUrl.replace('_start_', selectS).replace('_end_', selectE);
    window.location.href = url;
}