在没有模型的情况下手动将验证添加到文本框

时间:2011-03-17 16:47:25

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

我在表单中有一个文本框,我想添加一些验证。

如何在不使用模型的情况下为其添加一些不显眼的验证属性?

例如。

    @using (Html.BeginForm())
    {
        @Html.ValidationSummary()
        @Html.Label("code", "Confirmation Code") 
        @Html.TextBox("code")<!-- I want validation on this thing -->
        <input type="submit" value="Go" />
    }   

我如何制作required,以及其他如stringlength等。

3 个答案:

答案 0 :(得分:2)

HtmlHelpers将呈现包含data-*属性的HTML元素,该属性包含不显眼的JavaScript用于执行客户端验证的所有数据。

我不知道记录data-* HTML属性的任何资源,因此我建议创建一个用所需数据注释修饰的简单临时模型,并查看呈现的HTML。

一旦您知道所需的HTML属性,就可以直接在HTML中呈现它们。

更新

Brad Wilson帖子可能会有所帮助

答案 1 :(得分:1)

也许为时已晚,但我刚刚找到了解决方案。

var metaInfo = ViewData.ModelMetadata.Properties.First(data => data.PropertyName == "[Property name]");

Dictionary<string, object> attributes = new Dictionary<string, object>();

var validators = metaInfo.GetValidators(ViewContext.Controller.ControllerContext);
if(validators.Count() > 0)
{
    attributes.Add("data-val", "true");
    foreach (var validator in validators)
    {
        foreach(var rule in validator.GetClientValidationRules())
        {
            attributes.Add(string.Format("data-val-{0}", rule.ValidationType), rule.ErrorMessage);
            foreach(var param in rule.ValidationParameters)
            {
                attributes.Add(string.Format("data-val-{0}-{1}", rule.ValidationType, param.Key), param.Value);
            }
        }
    }
}

答案 2 :(得分:1)

基于David与Brad Wilson的链接以及我自己的一些挖掘方法,这是解决方案

<input id="MyInput" name="MyInput" data-val="true" data-val-required="The Error Message"></input>
<span class="field-validation-error" data-valmsg-for="MyInput" data-valmsg-replace="true"></span>

要启用的输入请求data-val="true"

然后添加要求。您可以使用MVC中的常规Helper来检查验证器,以了解您想要的那些。

例如:

 data-val-required="Message for requires"

 data-val-length-min="5"
 data-val-length="The message for min length 5"

这将不引人注意地验证您的表格。 (只要你包含jquery.unobtrisive.validate而不是正常的那个)