2012-06-27 31 views
0

問:ASP.NET MVC AJAX調用不帶靜電控制器的URL(魔弦)

什麼是明確的,安全的和系統的方式從JavaScript調用我MVC控制器/行動,但保留相關網址控制器更換時更新的中心位置?或者在運行時動態生成URL?或者爲了獲得AJAX控制器鏈接的編譯時檢查?

研究/過去的嘗試:

我最近在T4MVC插入到我的MVC項目。大!編譯時檢查我的視圖中的控制器鏈接 - 但我仍然有控制器URL遍佈我的JavaScript。更糟糕的是,我已經演變了在項目生命週期中如何做到這一點,所以我做了多種方式,但我仍然不滿意。


1)一種方法:

locationAutoComplete = new AjaxQueue({ 
Controller: "Utilities", // null for current controller 
Action: "GetMatchingLocations", 
DataModel: null, // null for raw JSON, or a local model to populate 
MaxQueuedRequests: 0 
}); 

2)另一種方法:上述

locationAutoComplete = function (location) { 
return $.ajaxPost(resolveUrl("~/Utilities/GetMatchingLocations")); 
} 

3)1和2都利用一個項目根在主/佈局JavaScript片段中定義,但仍使用未經檢查的URL字符串。所以,現在我已經開始受益於T4MVC通過簡單地定義在我.CSHTML視圖控制器字符串:

var locationLookupController = @Url.Action(MVC.Utilities.GetMatchingLocations()); 

4)SO文章(Ajax call Into MVC Controller- Url Issue)解決了這個一點。它討論方法3,但也建議使用AjaxHelper命名空間。由於我大量使用jQuery AJAX以及一些漂亮的自定義交互(例如,將結果加載到本地數據模型中,而不是在點擊事件中,但是按照一定的時間間隔),所以我認爲它不會對我有多大幫助。今天我甚至沒有在我的任何頁面上包含MS AJAX JavaScript代碼。

謝謝!

回答

1

繼續使用T4MVC。將它與一些jQuery和HTML5數據屬性混合在一起。這裏有一個例子:

<div data-location-lookup-url="@Url.Action(MVC.Utilities.GetMatchingLocations())"> 

... 

locationAutoComplete = function (location) { 
    var url = $('[data-location-lookup-url]').data('location-lookup-url'); 
    return $.ajaxPost(url); 
} 
+0

這是一個好主意。這比將錨定標記放在我的網頁上並不意味着被使用,但仍然相對合規。我可以爲它創建一個幫助器......你如何獲得在客戶端組織的URL?目前我在一個地方定義了所有的控制器URL,具體是因爲我的維護問題。但是,像這樣...也許控制器應該定義在使用它們的元素上。你寫出你的每個函數定義,還是你迭代一個選定的結果與其他屬性並創建它們?你是否存儲了後期數據以及獲取數據?如此多的問題:) – shannon

+0

「...也許應該在使用它們的元素上定義控制器。」是。至於其他一切,這取決於。 – danludwig

+0

我可以想象我會用一個包含DATA屬性的控件來替換我的PostalCode模板編輯器來執行自動完成。如此多的可能性! – shannon

相關問題