验证int数据类型asp .net mvc3

时间:2012-03-30 05:37:56

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

我收到The value 'abc' is not valid for fieldName.错误消息。这是默认的错误信息,我想以更简单的方式覆盖它。
截至目前我所尝试的内容如下所列

  • [RegularExpression(@"^\d+$",ErrorMessage="enter numeric value")]
  • [Integer(ErrorMessageResourceType = typeof(appName.Resources.abc.Resource), ErrorMessageResourceName = "error_numeric")]
  • [RegularExpression("([1-9][0-9]*)")]
  • Range(1,int.max,ErrorMessage="enter numeric value")
    但未能更改默认错误消息。
    建议我做最简单的方法。

       using System;
       using System.Collections.Generic;
       using System.Linq;
       using System.Web;
       using System.ComponentModel.DataAnnotations; 
       using System.Web.Mvc;
    
      namespace blueddPES.ViewModels
         {
         public class ContactViewModel
            {
             [Integer(ErrorMessage="sdfdsf")]
             public int? hp { get; set; }
            }
    

3 个答案:

答案 0 :(得分:11)

最简单的方法是使用Data Annotations Extensions。它有一些有用的属性,如整数等。

或者您可以编写自己的内容,例如:How to change 'data-val-number' message validation in MVC while it generate by helper

修改:在评论后添加了完整的示例。

我创建了一个示例vanilla MVC 3项目,然后执行以下操作:

  1. 添加了NuGet包DataAnnotationsExtensions.MVC3

  2. 添加了一个Model类:

    public class IntegerSample
    {
        [Required(ErrorMessage="Dude, please fill something in!")]
        [Integer(ErrorMessage="Are you stupid? Just fill in numbers only!")]
        public int? TestValue { get; set; }
    }
    
  3. 添加了家庭控制器:

    public class HomeController : Controller
    {
        //
        // GET: /Home/
        public ActionResult Index()
        {
            return View();
        }
    }
    
  4. 添加了主页视图:

    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>IntegerSample</legend>
            <div class="editor-label">
                @Html.LabelFor(model => model.TestValue)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.TestValue)
                @Html.ValidationMessageFor(model => model.TestValue)
            </div>
            <p>
                <input type="submit" value="Save" />
            </p>
        </fieldset>
    }
    
  5. 我希望您使用此示例代码获得更多见解。当我运行此示例时,它的工作方式与您希望的一样。

答案 1 :(得分:2)

您可以将自定义模型绑定器实现为shown here,或使用字符串数据类型而不是整数,然后应用正则表达式数据注释。当然,如果使用字符串数据类型,则在将视图模型映射到域模型时,可能需要手动将此字符串解析为基础数据类型。

答案 2 :(得分:0)

我们使用Phil Haack MetadataProvider的扩展版本,可以进行本地化。

看看这篇博客文章:http://haacked.com/archive/2011/07/14/model-metadata-and-validation-localization-using-conventions.aspx

总结:

  • 它使用类类型+属性确定资源键,例如Person_FirstName
  • 它通过添加验证属性来查找错误消息,例如Person_FirstName_Required
  • 您只需提供包含这些条目的资源文件。