問: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代碼。
謝謝!
這是一個好主意。這比將錨定標記放在我的網頁上並不意味着被使用,但仍然相對合規。我可以爲它創建一個幫助器......你如何獲得在客戶端組織的URL?目前我在一個地方定義了所有的控制器URL,具體是因爲我的維護問題。但是,像這樣...也許控制器應該定義在使用它們的元素上。你寫出你的每個函數定義,還是你迭代一個選定的結果與其他屬性並創建它們?你是否存儲了後期數據以及獲取數據?如此多的問題:) – shannon
「...也許應該在使用它們的元素上定義控制器。」是。至於其他一切,這取決於。 – danludwig
我可以想象我會用一個包含DATA屬性的控件來替換我的PostalCode模板編輯器來執行自動完成。如此多的可能性! – shannon