gpt4 book ai didi

c# - 如何删除 MVC2 的验证消息?

转载 作者:行者123 更新时间:2023-11-30 17:12:31 25 4
gpt4 key购买 nike

我正在使用 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; }

在表单中,此字段应允许用户将其留空并在用户尝试输入无法表示为数字的值时显示验证消息。从验证的角度来看,这是按预期工作并显示以下错误消息:

The stated My Custom Field value is invalid!

The field My Custom Field must be a number.

第一条验证消息是我编写的自定义验证消息,第二条验证消息是 MVC2 自动生成的消息。我需要摆脱第二个,因为它是多余的。我该怎么做呢?在我看来,我有以下标记

<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm())
{ %>
<%:Html.ValidationSummary(false)%>
<% Html.ValidateFor(m => m.MyCustomField); %>

最佳答案

你在这里遇到的这个问题是因为被绑定(bind)的属性是一个数字,模型绑定(bind)会自动处理字符串无法转换为数字的事实。这不是 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)都是在 string 属性上完成的。

理想情况下,您还将添加 [Bind(Exclude"MyCustomField")] 到模型类型 - 以确保 MVC 不会尝试绑定(bind) int? 字段.或者你可以让它成为 internal。如果在web项目中,你只需要在web项目中引用即可。

您还可以考虑真正 hacky 的方法 - 并通过 ModelState.Errors 在您的 Controller 方法中找到该错误并在返回您的 View 结果之前将其删除...

关于c# - 如何删除 MVC2 的验证消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10614927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com