AJAXテンプレートとJSONを使用して動的メニューをロードするMVCマスターページを設定しています-JSONは次の呼び出しで返されます:
var tabList = []; //これはコールバックのjsonデータを保持します
var getTabs = function () {
$.getJSON('Home/TabList', null, function (json) {
Sys.Observer.clear(tabList);
Sys.Observer.addRange(tabList, json);
});
}
if (tabList == '') { getTabs(); }
したがって、これはHomeControllerの関数を呼び出してJSONを返します。
public JsonResult TabList()
{
//get tabs
... //call code to get tabs - removed for ease of reading this question
JsonResult jsonTabs = Json(tabItems);
jsonTabs.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return jsonTabs;
}
catch (Exception ex)
{ throw ex; }
}
これは、次のテンプレートで使用されます。
id = "tabTemplate" sys:attach = "dataview" class = "sys-template grid_16 topnav" dataview:data = "{{tabList}}"
アンカータグを使用してメニュー項目を作成する:
sys:href ="{{'/'+コントローラー+'/'+アクション+'/'}}"target = "_ top"
JSONオブジェクトのプロパティを使用してメニューテキストにデータを入力します。
{{文章}}
次に、このマスターページを2つの異なるMVCページに添付しました(「インデックス」と「バージョン情報」、およびglobal.asaxは「インデックス」に移動します)
したがって、これは最初にページにアクセスしたときにうまく機能し、メニューは正しく描画されますが、上記のテンプレートで生成された[ホーム/バージョン情報]リンクをクリックした[バージョン情報]メニュー項目をクリックすると、機能しなくなります。何が起こるかというと、javascriptが正しく呼び出されます(つまり、「getTabs」関数を呼び出してgetJSON呼び出しを通過します)が、実際にはコントローラーにヒットしてJSONを取得することはありません(コントローラーアクションにブレークポイントを設定します。この場合はヒットしません)。
私は完全に途方に暮れていて、これを何日も解決しようとしてきました。どんな助けでも大歓迎です。
ありがとう。