2009-06-15 54 views
4

我有一個真正簡單的問題,但似乎無法弄清楚。.NET MVC的jQuery相對路徑爲window.location

由於MVC構建URL(包含所有路由信息)的方式,下面的方法不起作用。我希望pathname只返回虛擬目錄路徑。

當用戶從下拉列表中選擇一個ID時,我正在做的所有重定向到不同的路線。

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

回答

9

使用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") %>'); 
}); 
+0

道歉。我忘了提及這個腳本包含在腳本庫中,而不是在頁面上。 – Rake36 2009-06-15 14:41:28

+0

以解決方法更新了我的答案。 – tvanfosson 2009-06-15 14:56:33

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(); 
    }); 
});