私はMVCアプリケーションを使用して、さまざまなJsonResult
エンドポイントを使用してJavaScriptのViewModelを設定しています。MVCはJSON ViewModelをViewに渡します
私はモデルにデータを入れるためにいくつかのjQuery Ajaxリクエストを使用していますが、サーバー上のビューに渡す必要があるのは、初期モデルの多くです。 ViewModelには、(ユーザーがアプリケーションにある場所に応じて)3-5枚あり
は:
- 基本的なページのリンクを、これらは非常に頻繁に変更しないと全体のユーザーの全体まったく同じかもしれませんセッション
- ユーザー通知。
- ユーザデータ。
- (オプション)表示可能なデータ
- (オプション)その他のデータ
私は現在、最初の3枚をロードするために、このコードを使用しています:
$(document).ready(function() {
ko.applyBindings(viewModel);
@Html.Raw(ViewBag.Script)
// Piece 1. Almost always the same thing
postJSON('@Url.Action("HomeViewModelJson", "Home")', function (data) {
if (data == null)
return;
for (var i in data.Tabs) {
viewModel.tabs.push({ name: data.Tabs[i] });
}
for (var i in data.Buttons) {
viewModel.metroButtons.push({ name: data.MetroButtons[i] });
}
for (var i in data.Ribbons) {
viewModel.ribbons.push(data.Ribbons[i]);
}
ApplyButtonThemes();
});
});
// Piece 2. Changes constantly. OK as is
postJSON('@Url.Action("GetNotifications", "NotificationAsync")', function (nots) {
viewModel.notifications.removeAll();
ko.utils.arrayForEach(nots, function (item) {
item.readNotification = function() {
hub.markNotificationAsRead(this.Id);
return true;
};
viewModel.notifications.push(item);
});
});
// Piece 3. Changes but should also be loaded at startup
postJSON('@Url.Action("GetUser", "UserAsync")', function (user) {
viewModel.user(koifyObject(user));
});
postJSON = function(url, data, callback) {
if($.isFunction(data)) {
callback = data;
data = {};
}
$.ajax({
'type': 'POST',
'url': url,
'contentType': 'application/json',
'data': ko.toJSON(data),
'dataType': 'json',
'success': callback
});
};
私はこのような何かをやってみました、しかし、私は@Html.Action("HomeViewModelJson", "Home")
を使って、HTTPヘッダが変更され、JSONであるかのようにページ全体が送信されることを確認しています。
私がしたいのは、既存のJsonResult
エンドポイントを使用して、ページがユーザーに送信される前にJsonデータをサーバー側の自分のViewModelに取得することです。
コントローラーの書き換えを行わずにそのオプションを使用できるようにするオプションはありますか?
を!私はそれを試してみましょう:)私はそれが可能であったことを知りませんでした! –
受け入れを忘れました。素晴らしい仕事を! –
+1ニース............. – SleepyBoBos