【发布时间】:2013-12-16 09:42:03
【问题描述】:
我正在为我的 ASP.NET MVC 网站上的用户编写配置文件。我有很多属性(复选框、下拉菜单等),例如:
- 时区
- 夏令时
- 电子邮件设置
我可以制作自己的模型来处理所有这些问题:
public class ProfileViewModel
{
public TimeZoneOptions TimeZone { get; set; }
public DstOptions Dst { get; set; } // Daylight Saving Time
public bool EmailSettings1 { get; set; }
public bool EmailSettings2 { get; set; }
// ...
public bool EmailSettings22 { get; set; }
}
我的视图模型属性没有相互关联。所以,我不需要打电话给ModelState.IsValid。看来我的模型将永远有效。
如果我按照在 ASP.NET MVC 中保存模型的标准方式,它将迫使我的客户点击两次:
- 更改属性
- 点击保存按钮
但我希望他们只需单击一下即可。就像这张截图一样:
我希望每个属性在用户点击它们时都被标记为“已保存更改”。 我想用最少的代码来实现这一点。看起来很容易做到:
- 仅限 jQuery
或
- Knockout.js
但我无法决定哪个更好。在 jQuery 中,我可以直接使用 DOM 进行操作。但似乎通过淘汰赛它可能会更优雅,并且我可以使我的代码更易于维护。
我不知道如何使用淘汰赛来做到这一点,可能是在保存元素时需要某种绑定来更新元素:
<span data-bind="display-when-saved-for-property: EmailSettings1"></span>
???
也许还有其他方法可以做到这一点。任何帮助将不胜感激。
【问题讨论】:
-
只需为您的复选框设置一个 onchange 事件,该事件对您的控制器进行 ajax 调用。您的控制器将保存数据,ajax 成功回调将显示更改保存的消息。我就是这样做的。如果您想了解更多详情,请告诉我
-
@heymega,谢谢。以及如何检测哪些属性已更改?我必须将整个模型提交给控制器,对吗?所以它是唯一的 ajax url 来保存所有属性的模型。如何显示特定属性的“已保存更改”?
-
给我 10 分钟,我正在为你写一些代码
标签: jquery asp.net-mvc knockout.js