【发布时间】:2015-08-28 16:45:07
【问题描述】:
我有基础课:
public abstract class AbstractBaseModel : IModel
{
[Display(Name = "Some Name")]
[DisplayFormat(DataFormatString = "{0:d0}")]
[RegularExpression(@"[0-9]{1,10}", ErrorMessage = "error")]
public virtual string SomeName{ get; set; }
}
IModel 接口只是简单的属性声明:
public interface IModel
{
string SomeName{ get; set; }
}
从基本模型我有 2 个派生模型
public class ClientModel : AbstractBaseModel
{
[Required(ErrorMessage = "Some error message for customer only")]
public override string SomeName{ get; set; }
}
public class PowerUserModel : AbstractBaseModel
{
[Required(ErrorMessage = "Different message for the admin")]
public override string SomeName{ get; set; }
}
这个模型,或者更确切地说是接口是组合多个模型的另一个模型的一部分:
public class ComboEndModel
{
public IModel Model { get; set; }
public IDifferentModel DifferentModel { get; set; }
}
根据当前使用的View/Controler,我将新的ClientModel 或PowerUserModel 作为模型传递给ComboEndModel
当视图被渲染时,我只从基本的抽象模型中获取注释,而不是在派生类型中添加的注释。我怀疑这是因为我将接口用作嵌套模型属性而不是类型。
实现这种关系的正确方法是什么,或者解决注释不正确的问题?我应该尝试自定义绑定吗?
【问题讨论】:
-
已编辑 以为你有 dup。标签;我的错误(喝咖啡)
-
您能否分享您的视图代码中会导致模型注释重要的部分?例如,您是否使用
@Html.EditorFor()? -
您注意到的是预期的行为,更重要的是,当您提交到 POST 方法时,您将无法绑定到您的模型,因为
DefaultModelBinder无法初始化接口。使用具体的实现。
标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor