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

Rak*_*e36 5 asp.net-mvc jquery

我有一个真正简单的问题,但似乎无法弄明白.

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

当用户从下拉列表中选择ID时,我正在做的是重定向到不同的路由.

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

tva*_*son 10

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

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

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

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

在视图中:

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


Rak*_*e36 6

这就是我最终做的事情.

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

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

在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();
    });
});
Run Code Online (Sandbox Code Playgroud)