【发布时间】:2013-09-16 23:25:24
【问题描述】:
在我的整个应用程序中,我希望将 Razor 用于与阅读相关的所有功能,并利用 knockoutJS 和 AJAX 进行 CUD 操作。
在我的个人资料视图中,我执行了以下操作:
<div>
<h4>About Me</h4>
<!-- ko if: !isEditingAboutMe() -->
<p>@Model.User.AboutMe</p>
@if (Model.CurrentUserCanEdit)
{
<a data-bind="click: editAboutMe">edit</a>
}
<!-- /ko -->
<!-- ko if: isEditingAboutMe() -->
@Html.TextBoxFor(model => model.User.AboutMe, new { data_bind = "value: aboutMe" })
<a data-bind="click: saveAboutMe">save</a>
<a data-bind="click: cancelAboutMe">cancel</a>
<!-- /ko -->
</div>
这样搜索引擎至少可以抓取内容,启用了 javascript 的用户可以执行 CUD 操作。
我上面的问题是 - 使用 AJAX,如果我点击“保存”,我如何将新值绑定到 Razor 模型(第四行向下)?
对应的JS:
function ProfileVm() {
var self = this;
self.aboutMe = ko.observable();
self.saveAboutMe = function() {
// AJAX call, after success close the field
self.isEditingAboutMe(false);
};
self.cancelAboutMe = function() {
// just for testing, would revert the value in practice
self.isEditingAboutMe(false);
};
self.isEditingAboutMe = ko.observable(false);
self.editAboutMe = function() {
self.isEditingAboutMe(true);
};
}
$(document).ready(function () {
ko.applyBindings(new ProfileVm());
})
另外 - 欢迎就这种方法的“适当性”提供反馈。
【问题讨论】:
-
你的
saveAboutMe函数是做什么的? -
它调用一个 AJAX 端点并返回成功或失败。如果成功,则为 isEditing(false),但该值不会反映在视图中。
-
然后让
Action返回新更新的模型(以 JSON 格式),并将其重新应用到 Knockout。 -
@haim770 - MVC 动作?我不确定你的意思。
-
我想我误解了你的问题,请看我的回答。
标签: asp.net-mvc asp.net-mvc-4 knockout.js