使用数字属性的MVC3 DataAnnotationsExtensions错误

时间:2011-03-24 08:28:48

标签: asp.net-mvc asp.net-mvc-3 data-annotations unobtrusive-javascript

我安装了Scott的Kirkland DataAnnotationsExtensions。

在我的模特中,我有:

[Numeric]
public double expectedcost { get; set; }

在我的观点中:

@Html.EditorFor(model => model.expectedcost)

现在,当页面尝试渲染时,我收到以下错误:

  

验证类型名称不引人注目   客户端验证规则必须是   独特。以下验证类型   不止一次见过:数字

为什么我收到错误的任何想法?

2 个答案:

答案 0 :(得分:15)

快速回答就是删除属性

[Numeric]

更长的解释是,根据设计,验证已经添加了 data-val-number ,因为它的类型为 double 。通过添加 Numeric ,您将复制验证。

这有效:

[Numeric]
public string expectedcost { get; set; }

因为变量的类型为 string ,并且您要添加 Numeric 属性。

希望这有帮助

答案 1 :(得分:0)

我基本上遇到了同样的问题,我设法用以下代码解决了这个问题:(在这里回答:ASP.NET MVC - "Validation type names must be unique."

使用System; 使用System.Web.Mvc; 还有ValidationRule:

public class RequiredIfValidationRule:ModelClientValidationRule {     私有const字符串Chars =" abcdefghijklmnopqrstuvwxyz&#34 ;;

public RequiredIfValidationRule(string errorMessage, string reqVal,
    string otherProperties, string otherValues, int count)
{
    var c = "";
    if (count > 0)
    {
        var p = 0;
        while (count / Math.Pow(Chars.Length, p) > Chars.Length)
            p++;

        while (p > 0)
        {
            var i = (int)(count / Math.Pow(Chars.Length, p));
            c += Chars[Math.Max(i, 1) - 1];
            count = count - (int)(i * Math.Pow(Chars.Length, p));
            p--;
        }
        var ip = Math.Max(Math.Min((count) % Chars.Length, Chars.Length - 1), 0);
        c += Chars[ip];
    }

    ErrorMessage = errorMessage;
    // The following line is where i used the unique part of the name
    //   that was generated above.
    ValidationType = "requiredif"+c;
    ValidationParameters.Add("reqval", reqVal);
    ValidationParameters.Add("others", otherProperties);
    ValidationParameters.Add("values", otherValues);
}

}

我希望这会有所帮助。