假设这个模型:
Public Class Detail
...
<DisplayName("Custom DisplayName")>
<Required(ErrorMessage:="Custom ErrorMessage")>
Public Property PercentChange As Integer
...
end class
Run Code Online (Sandbox Code Playgroud)
和观点:
@Html.TextBoxFor(Function(m) m.PercentChange)
Run Code Online (Sandbox Code Playgroud)
将继续这个HTML:
<input data-val="true"
data-val-number="The field 'Custom DisplayName' must be a number."
data-val-required="Custom ErrorMessage"
id="PercentChange"
name="PercentChange" type="text" value="0" />
Run Code Online (Sandbox Code Playgroud)
我想自定义data-val-number我猜测生成的错误消息,因为它PercentChange是一个Integer.我正在寻找这样一个属性来改变它,range或者任何相关的不起作用.
我知道有可能编辑不显眼的js文件本身或在客户端覆盖它.我想像data-val-number服务器端的其他人一样更改错误消息.
validation asp.net-mvc localization unobtrusive-validation asp.net-mvc-3
App_GlobalResources使用PropertyValueRequired密钥添加资源文件并更改DefaultModelBinder.ResourceClassKey为文件名对MVC 4没有影响.字符串The {0} field is required永远不会更改.我不想在每个必填字段上设置资源类类型和键.我错过了什么吗?
编辑:
我对Darin Dimitrov的代码进行了一些小修改,以保持必需的自定义工作:
public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
public MyRequiredAttributeAdapter(
ModelMetadata metadata,
ControllerContext context,
RequiredAttribute attribute
)
: base(metadata, context, attribute)
{
if (attribute.ErrorMessageResourceType == null)
{
attribute.ErrorMessageResourceType = typeof(Messages);
}
if (attribute.ErrorMessageResourceName == null)
{
attribute.ErrorMessageResourceName = "PropertyValueRequired";
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用DataAnnotations属性和ASP.Net MVC 2为我的ViewModel提供模型验证:
public class ExamplePersonViewModel {
[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))]
[StringLength(128, ErrorMessageResourceName = "StringLength", ErrorMessageResourceType = typeof(Resources.Validation))]
[DataType(DataType.Text)]
public string Name { get; set; }
[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))]
[DataType(DataType.Text)]
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这似乎按预期工作(尽管它非常冗长).我遇到的问题是,正在执行的幕后模型验证与任何特定属性无关.上述模型中的一个例子是该Age属性需要是一个int.如果您尝试在表单上输入非整数值,则会出现以下(非本地化)消息时出错:
字段Age必须是数字.
如何对这些非属性验证消息进行本地化?
是否有可用的这些消息的完整列表,以便我可以确保它们都已本地化?
我是asp.net的新手,我有一个问题.当用户在编辑器中插入除数字以外的十进制字段时,他们会收到错误"字段名称"不是数字.但我不希望他们收到此消息,我希望他们收到另一条消息.对于必需和范围验证器,我没有问题.我有什么方法可以做到这一点吗?
我没有提到改变文化只是显示另一条消息.
谢谢.