我收到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; }
}
答案 0 :(得分:11)
最简单的方法是使用Data Annotations Extensions。它有一些有用的属性,如整数等。
或者您可以编写自己的内容,例如:How to change 'data-val-number' message validation in MVC while it generate by helper
修改:在评论后添加了完整的示例。
我创建了一个示例vanilla MVC 3项目,然后执行以下操作:
添加了NuGet包DataAnnotationsExtensions.MVC3
添加了一个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; }
}
添加了家庭控制器:
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
}
添加了主页视图:
@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>
}
我希望您使用此示例代码获得更多见解。当我运行此示例时,它的工作方式与您希望的一样。
答案 1 :(得分:2)
您可以将自定义模型绑定器实现为shown here,或使用字符串数据类型而不是整数,然后应用正则表达式数据注释。当然,如果使用字符串数据类型,则在将视图模型映射到域模型时,可能需要手动将此字符串解析为基础数据类型。
答案 2 :(得分:0)
我们使用Phil Haack MetadataProvider的扩展版本,可以进行本地化。
总结: