我有一个.NET 2.0类,其属性标记为virtual.I需要将该类用作MVC2应用程序中的模型。因此,我创建了一个继承自.NET 2.0类的.NET 3.5类,并将DataAnnotations属性添加到新类的overriden属性中。我所做的一小部分是在
之下// .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视图的模型。 Serverside验证工作正常,但客户端验证不正常。具体而言,页面上不显示验证错误。
我错过了什么,或者只能使用好友类来做到这一点。
感谢。
编辑1: 我现在用伙伴验证类尝试了这个,但这也不起作用。
编辑2: 我现在已经知道提供给HtmlFor助手的lambda表达式导致了问题。例如,
Html.TextBoxFor(M => m.FirstName)。调用它计算MemberExpression(expression.Body)作为客户类的DeclaringType而不是MVCCustomer类ModelMetadata.FromLambdaExpression方法
我试图改变λ表达式来Html.TextBoxFor((MVCCustomer米)=> m.FirstName)。但是DeclaringType还是客户
有没有办法可以让DeclaringType成为MVCCustomer类型,而不是Customer。
答案 0 :(得分:2)
我现在已经通过在.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属性。
希望这有帮助
答案 1 :(得分:0)
愚蠢的问题,但您是否在视图/主文件中包含以下脚本?
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
这些是客户端验证所必需的。