使用继承的 MVC2 DataAnnotations 验证

2024-05-07

我有一个 .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(使用前将#替换为@)

使用继承的 MVC2 DataAnnotations 验证 的相关文章