我有一种情况需要在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将在其他一些函数中设置。
有了上面,我收到了错误:
2>'/'应用程序中的服务器错误。路径中的非法字符。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.ArgumentException:路径中的非法字符。
来源错误:
在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。
答案 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变量selectS
和selectE
的相应值:
var selectS;
var selectE;
function SearchClick(obj) {
var url = myUrl.replace('_start_', selectS).replace('_end_', selectE);
window.location.href = url;
}