【发布时间】:2011-07-02 03:13:57
【问题描述】:
所以我有一个表单可以很好地与 MVC 3、DataAnnotations 和 Unobtrusive javascript 配合使用。但是,我想在我的输入字段上放置一个“水印”,例如,First Name 文本框默认填充一个“First Name”值。当用户单击它时,该值会消失,如果他们离开该字段而没有输入任何内容,“名字”会再次出现。另外,我已经实现了这个并且运行良好。
我的问题与我的视图模型的 FirstName 属性上的 [Required] 属性有关。如果用户提交表单,默认情况下该字段包含“名字”,因此它通过“必填”验证。
解决这个问题的最佳方法是什么...我正在考虑几个选项:
1) 在清除水印的不显眼的 JS 验证之前注入一些 jQuery 来触发,这样当验证触发时,那些具有默认值的字段是空白的。我不确定这是可能的。你能在不显眼的 JS 运行验证之前以某种方式注入一个函数吗?
2) 修改 [Required] 属性或创建一个新属性以接受默认值,然后比较它以查看它们是否匹配。这引发了一些问题,因为我现在在多个位置指定了默认值,一个在 UI 中,一个在代码中,感觉不对。
3) 创建一个新的“水印”属性,我用它来装饰一个属性,该属性指定该字段的默认值。创建一个新的 HTML 帮助程序(而不是 TextBoxFor)来查找此属性并向标记发出适当的属性。修改或创建一个新的 [Required] 属性,用于查找同一字段上是否存在 [Watermark]。这将“默认值”保留在一个地方并遵守 DRY 原则,但感觉就像我将 UI 元素放入代码中(水印纯粹是视觉的),而且对于应该是一个简单问题的解决方案也感觉过于复杂.
有什么想法吗?
【问题讨论】:
标签: c# jquery asp.net-mvc validation unobtrusive-javascript