Tôi có một ứng dụng MVC mà tôi đang sử dụng nhiều điểm cuối JsonResult
để điền ViewModel javascript.Xem qua MVC JSON ViewModel để xem
Tôi đã sử dụng một số yêu cầu jQuery Ajax để điền vào mô hình, nhưng tôi muốn phần lớn mô hình bộ phận sinh dục được chuyển đến chế độ xem trên máy chủ.
ViewModel có 3-5 miếng (tùy thuộc vào nơi người dùng đang ở trong ứng dụng):
- liên kết trang cơ bản, những không thay đổi rất thường xuyên và có thể là chính xác cùng khắp người sử dụng toàn bộ của phiên
- Thông báo của người dùng.
- Dữ liệu người dùng.
- (không bắt buộc) dữ liệu thể xem dữ liệu
- (không bắt buộc) misc
Tôi hiện đang sử dụng mã này để nạp ba phần đầu tiên:
$(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
});
};
tôi đã cố gắng làm một cái gì đó như thế này, nhưng tôi thấy rằng bằng cách sử dụng @Html.Action("HomeViewModelJson", "Home")
đang khiến tiêu đề HTTP bị thay đổi và toàn bộ trang được gửi như thể đó là JSON
(function (data) {
if (data == null)
return;
for (var i in data.Tabs) {
viewModel.tabs.push({ name: data.Tabs[i] });
}
for (var i in data.MetroButtons) {
viewModel.metroButtons.push({ name: data.MetroButtons[i] });
}
for (var i in data.Ribbons) {
viewModel.ribbons.push(data.Ribbons[i]);
}
ApplyMetroButtonThemes();
})('@Html.Action("HomeViewModelJson", "Home")');
Điều tôi muốn làm là sử dụng các điểm cuối JsonResult
hiện có để nhận dữ liệu Json vào ViewModel của tôi ở phía máy chủ, trước khi trang được gửi tới người dùng.
Có bất kỳ tùy chọn nào cho phép tôi thực hiện điều đó bằng cách viết lại bộ điều khiển của mình không?
Có vẻ như nó có thể làm việc! Hãy để tôi thử nó ra :) Tôi thậm chí không biết rằng đã có thể! –
Quên để chấp nhận. Làm việc tuyệt vời! –
+1 Đẹp ............. – SleepyBoBos