用于window.location的.NET MVC jQuery相对路径

时间:2009-06-15 14:35:24

标签: jquery asp.net-mvc

我有一个非常简单的问题,但似乎无法弄明白。

以下不起作用,因为MVC构建URL的方式(它包括所有路由信息)。我希望pathname只返回虚拟目录路径。

当用户从下拉列表中选择ID时,我所做的就是重定向到不同的路线。

$(document).ready(function() {
    $('#TransactionIds').change(function() {
        document.location = window.location.pathname + "/CeuTransaction/Index/" + $('#TransactionIds').val();
    });
});

2 个答案:

答案 0 :(得分:10)

使用UrlHelper构建路径。它将考虑应用程序相对于Web服务器根目录的位置。

$(document).ready(function() {
   $('#TransactionIds').change(function() {
       document.location = '<%= Url.Action( "Index", "CeuTransaction" ) %>'
                            + '/'
                            + $('#TransactionIds').val();
   });
});

替代方案:分为两部分,以便该函数可以包含在javascript库中(仍然需要从视图或主控中调用)。通过一些工作,你可以使它成为jQuery扩展。

function redirectOnChange( selector, action )
{
   $(selector).change( function() {
       document.location = action + '/' + $(selector).val();
   });
}

在视图中:

$(function() {
    redirectOnChange('#TransactionIds',
                     '<%= Url.Action( "Index", "CeuTransaction" ) %>' );
});

答案 1 :(得分:6)

这是我最终做的事情。

在页面中添加了隐藏文字字段:

<input type="hidden" value="<%= Url.Content("~/CeuTransaction/Index/") %>" id="pathname" />

在js脚本库中使用以下内容:

// The following line enables jQuery intellisense
/// <reference path="jquery-1.3.2-vsdoc.js" />

$(document).ready(function() {
    $('#TransactionIds').change(function() {
        document.location = $('#pathname').val() + $('#TransactionIds').val();
    });
});