我需要一个复选框来返回可为空的 bool 值。我应该怎么办? Razer 引擎有三态复选框吗? 我发现this问题,但链接无效。
最佳答案
您可以创建一个 TriState
类、该类的自定义 ModelBinder
以及相应的显示/编辑模板。
TriState
类应该有一个属性来存储当前状态的表示,如何存储并不重要:例如使用 enum
、使用 int
可以是 -1、0 或 1,或者可以为 null bool bool?
显示模板应该简单地显示状态。 IE。它可以显示各州的不同图像,也许还有相关的“标签”。
编辑模板应显示状态并具有允许在单击时旋转 3 种状态的脚本。
例如,编辑/显示模板可以实现为带有文本的跨度,该文本将用作状态的标签,并且可以具有不同的 CSS 样式来将图像显示为跨度的背景图像。这将使更改服务器和客户端脚本中的图像变得容易。
对于编辑模板,跨度还应该具有:
- 一个隐藏字段,以自定义
ModelBinder
可以恢复的方式存储值(即格式化为字符串来存储值,并解析字符串来恢复它) - 一个脚本,用于处理跨度的点击事件并更改状态,即更新隐藏字段中的值以及显示相应背景图像的样式。
所以你需要:
TriState
类- 为
TriState
类自定义ModelBinder
。 Look here , or here . - 用于显示/编辑的模板。阅读此博客:Brad Wilson: ASP.NET MVC 2 Templates
- 显示不同图像的样式(定义背景图像和填充,以便文本不会覆盖图像)。此外,样式可以更改可点击版本(编辑器模板)中的光标,并且可能更改悬停时的显示,以向用户提示该元素是可点击的。
- 用于更改状态的客户端脚本(仅适用于编辑器模板)。对于这个脚本,我建议添加一个“data-”属性并以不显眼的方式附加它。请参阅my answer to this question .
您可以通过在类中实现三个附加属性来存储要显示的三种状态的标签来改进这一点。这些值可以作为额外的“data-”属性添加到范围中,以便客户端脚本可以根据当前状态更改标签。
关于asp.net-mvc-4 - Razor 的三态复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17596636/