0

質問:

JavaScriptからMVCコントローラー/アクションを呼び出すための明確で安全かつ体系的な方法は何ですか?ただし、コントローラーが変更されたときに更新するために、関連するURLを中央の場所に保持しますか?または、実行時にURLを動的に生成するには?または、AJAXコントローラーリンケージのコンパイル時チェックを取得するには?

研究/過去の試み:

最近、T4MVCをMVCプロジェクトに接続しました。素晴らしい!ビュー内のコントローラーリンケージのコンパイル時チェック-しかし、JavaScript全体にコントローラーURLが散らばっています。さらに悪いことに、私はプロジェクトの存続期間にわたってそれを行う方法を進化させてきたので、まだ満足していない複数の方法でそれを行っています。


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文字列を使用します。だから今、私は.CSHTMLビューでコントローラー文字列を定義するだけでT4MVCの恩恵を受け始めました。

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

4)SOの記事(MVCコントローラーへのAjax呼び出し-URLの問題)はこれに少し対処しています。方法3について説明しますが、AjaxHelper名前空間の使用も提案します。私はjQueryAJAXをかなりカスタマイズされたインタラクション(たとえば、クリックイベントではなく、時間間隔でローカルデータモデルに結果をロードする)で多用しているので、あまり役に立たないと思います。今日、私はどのページにもMSAJAXJavaScriptコードを含めていません。

ありがとう!

4

1 に答える 1

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);
}
于 2012-06-27T12:46:22.300 に答える