如何在没有数据注释的情况下创建字段

时间:2012-01-23 17:22:19

标签: asp.net-mvc-3 unobtrusive-validation

我正在使用MvcContrib Grid在页面上显示一个表格。我使用自定义列在表格上生成一个复选框,以便用户可以选择多行并提交表单。

除非至少选中了一个复选框,否则我不希望提交表单。我可以自己编写这个Javascript来强制执行验证,但我想知道如何使用MVC3提供的不显眼的库。

我想我只需要使用适当的类和属性设置我的输入,然后页面上的脚本(validate和validate.unobtrusive)应该选择它们并将它们标记为需要验证,但我无法进行到目前为止得到正确的组合。

以下是我目前正在生成的输入:

<input type="checkbox" 
       name="foo" 
       value="@item.foo" 
       class="input-validation-error" 
       data-val-required="Please select an option." 
       data-val="true" />

3 个答案:

答案 0 :(得分:1)

尝试在项目上设置data-val属性,然后你必须告诉jQuery你有新内容通过以下方式重新解析表单:

 $.validator.unobtrusive.parse($('#yourForm'));

其中form当然是对表单元素的引用。

还有这个很棒的帖子,jQuery有一些你可以调用的内部适配器: 来自http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2

jQuery.validator.unobtrusive.adapters.addSingleVal("notequalto", "otherproperty", "mynotequaltofunction")

答案 1 :(得分:1)

根据我的经验,显示客户端验证的一个常被忽视的错误是在页面上放置了一个Html.ValidationMessageFor(lambda)。

如果不这样做,将不会触发客户端验证以阻止表单提交和/或显示使用客户端注释生成的消息。

希望这有帮助。

答案 2 :(得分:0)

<div class="editor-field">
    <input class="text-box single-line" 
    data-val="true" data-val-number="The field Qty Available must be a number." 
    data-val-range="The field Qty Available must be between 0 and 120." 
    data-val-range-max="120" data-val-range-min="0" 
    data-val-required="The Qty Available field is required." 
    id="QtyOnHand" name="QtyOnHand" type="text" value="12" />
    <span class="field-validation-valid" data-valmsg-for="QtyOnHand" 
          data-valmsg-replace="true"></span>
</div>

在阅读上面的代码之后,数据模型注释和data-val- *属性之间的联系应该是清楚的,但是客户端验证关联的地方可能并不那么明显。打开\ Scripts \ jquery.validate.unobtrusive.js文件并搜索“data-val”。您将立即看到JavaScript使用data-val- ,input - 和field- * CSS类来显示/隐藏客户端上的验证消息。

以上摘自这篇伟大的article,您可能需要完整阅读。