2

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

众所周知,我们可以在 xx.cshtml 中使用 @Url.RouteUrl("RouteName", new { params}) 生成 url。现在我想在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 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

4

1 回答 1

1

现在我想在javascript中以同样的方式生成url,可以吗?

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

您可以做的是在您的视图中将此 url 生成为全局 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;
}
于 2013-10-29T12:07:40.013 回答