asp.net-mvc-4 - Razor 的三态复选框

标签 asp.net-mvc-4 razor checkbox user-controls

我需要一个复选框来返回可为空的 bool 值。我应该怎么办? Razer 引擎有三态复选框吗? 我发现this问题,但链接无效。

最佳答案

您可以创建一个 TriState 类、该类的自定义 ModelBinder 以及相应的显示/编辑模板。

TriState 类应该有一个属性来存储当前状态的表示,如何存储并不重要:例如使用 enum、使用 int 可以是 -1、0 或 1,或者可以为 null bool bool?

显示模板应该简单地显示状态。 IE。它可以显示各州的不同图像,也许还有相关的“标签”。

编辑模板应显示状态并具有允许在单击时旋转 3 种状态的脚本。

例如,编辑/显示模板可以实现为带有文本的跨度,该文本将用作状态的标签,并且可以具有不同的 CSS 样式来将图像显示为跨度的背景图像。这将使更改服务器和客户端脚本中的图像变得容易。

对于编辑模板,跨度还应该具有:

  • 一个隐藏字段,以自定义 ModelBinder 可以恢复的方式存储值(即格式化为字符串来存储值,并解析字符串来恢复它)
  • 一个脚本,用于处理跨度的点击事件并更改状态,即更新隐藏字段中的值以及显示相应背景图像的样式。

所以你需要:

  • TriState
  • TriState 类自定义 ModelBinderLook 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/

相关文章:

angularjs - 为什么 ng-click 复选框会在调用函数后更新数组的值?

php - 从复选框值中生成 URL。 mvc模式

asp.net-mvc - 如何通过 SignalR Hub 向用户发送通知新消息

c# - 模型上的自定义属性

c# - 如何在 Javascript 中使用模型?

html - 如何在 HTML <table> 中的 <td> 元素中设置列?

c# - MVC - 从 View 调用 Controller

.net - 将 CSS 类添加到 Html.BeginForm()

asp.net-mvc - Asp.net MVC Razor View - CS1525 : Invalid expression term '.'

html - 选中时更改复选框背景颜色