我有一个 .NET 2.0 类,其属性被标记为 virtual。我需要在 MVC2 应用程序中使用该类作为模型。因此,我创建了一个继承自 .NET 2.0 类的 .NET 3.5 类,并将 DataAnnotations 属性添加到新类中的重写属性中。下面是我所做的一个片段
// .NET 2.0 class
public class Customer
{
private string _firstName = "";
public virtual string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
}
// .NET 3.5 class
public class MVCCustomer : Customer
{
[Required(ErrorMessage="Firstname is required")]
public override string FirstName
{
get { return base.FirstName; }
set { base.FirstName = value; }
}
}
我已使用该类作为使用 HtmlFor 帮助程序的 MVC2 视图的模型。服务器端验证可以正常工作,但客户端验证却不能。具体来说,验证错误不会显示在页面上。
我错过了什么,或者只能使用伙伴类来做到这一点。
Thanks.
编辑1:
我现在已经尝试过使用好友验证类,但这也不起作用。
编辑2:
我现在发现是提供给 HtmlFor 助手的 lambda 表达式导致了这个问题。例如
Html.TextBoxFor(m => m.FirstName) 调用 ModelMetadata.FromLambdaExpression 方法,该方法将 MemberExpression (expression.Body) 的 DeclaringType 计算为 Customer 类,而不是 MVCCustomer 类。
我尝试将 lambda 表达式更改为 Html.TextBoxFor((MVCCustomer m) => m.FirstName) 但 DeclaringType 仍然是 Customer。
有没有办法让 DeclaringType 成为 MVCCustomer 类型而不是 Customer 类型。
我现在通过在 .net 3.5 类中的属性上使用 new 关键字来解决这个问题,如下所示
// .NET 2.0 class
public class Customer {
private string _firstName = "";
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
}
// .NET 3.5 class
public class MVCCustomer : Customer {
[Required(ErrorMessage="Firstname is required")]
public new string FirstName
{
get { return base.FirstName; }
set { base.FirstName = value; }
}
}
现在,这可以按预期工作,并且 MVCCustimer 类中的 DataAnnotations 属性已正确应用。
希望这可以帮助
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)