如何删除 MVC2 的验证消息
本文关键字:MVC2 验证 消息 删除 何删除 | 更新日期: 2023-09-27 18:34:31
我正在使用 ASP.NET C# MVC2,并且在具有以下数据注释验证属性的模型中具有以下字段:
[DisplayName("My Custom Field")]
[Range(long.MinValue, long.MaxValue, ErrorMessage = "The stated My Custom Field value is invalid!")]
public long? MyCustomField{ get; set; }
在表单中,此字段应允许用户将其留空,并在用户尝试输入无法表示为数字的值时显示验证消息。从验证的角度来看,这正在按预期工作并显示以下错误消息:
第一个验证消息是声明的"我的自定义字段"值无效!
字段我的自定义字段必须是数字。
我编写的自定义验证消息,第二个验证消息是 MVC2 自动生成的消息。我需要摆脱第二个,因为它是多余的。我该怎么做?在我看来,我有以下标记
<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm())
{ %>
<%:Html.ValidationSummary(false)%>
<% Html.ValidateFor(m => m.MyCustomField); %>
此处遇到的此问题是因为要绑定的属性是数字,并且模型绑定会自动处理字符串无法转换为数字的事实。 这不是RangeAttribute
做的。
相反,您可以考虑将新属性作为string
并派生您自己的RangeAttribute
,该属性在字符串级别工作,首先解析数字。
然后,您让现有属性包装该字符串:
[DisplayName("My Custom Field")]
[MyCustomRangeAttribute(/* blah */)] //<-- the new range attribute you write
public string MyCustomFieldString
{
get; set;
}
public int? MyCustomField
{
get
{
if(string.IsNullOrWhiteSpace(MyCustomField))
return null;
int result;
if(int.TryParse(MyCustomField, out result))
return result;
return null;
}
set
{
MyCustomFieldString = value != null ? value.Value.ToString() : null;
}
}
您的代码可以非常愉快地继续处理 int?
属性,但是 - 所有模型绑定都是在字符串属性上完成的。
理想情况下,您还将[Bind(Exclude"MyCustomField")]
添加到模型类型中,以确保 MVC 不会尝试绑定int?
字段。 或者你可以让它internal
. 如果它位于 Web 项目中,并且您只需要在 Web 项目中引用它。
您还可以考虑真正的黑客方法 - 并通过ModelState.Errors
在控制器方法中找到该错误并在返回查看结果之前将其删除......