gpt4 book ai didi

c# - MVC - 具有接口(interface)和注释的嵌套模型

转载 作者:行者123 更新时间:2023-12-02 17:24:56 24 4
gpt4 key购买 nike

我有基础课:

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 接口(interface)只是简单的属性声明:

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; }
}

这个模型,或者更确切地说,接口(interface)是另一个组合了多个模型的模型的一部分:

public class ComboEndModel
{
public IModel Model { get; set; }
public IDifferentModel DifferentModel { get; set; }
}

根据当前使用的 View/Controler,我将新的 ClientModelPowerUserModel 作为ComboEndModel 中的模型

渲染 View 时,我仅从基本抽象模型获取注释,而不是在派生类型中添加的注释。我怀疑这是因为我使用接口(interface)作为嵌套模型属性而不是类型。

实现这种关系的正确方法是什么,或者使用不正确的注释解决问题?我应该尝试使用自定义绑定(bind)吗?

最佳答案

可能对您有用的一件事是为每个派生模型创建编辑器模板。

如果你像这样定义你的 ComboEndModel

var model = new ComboEndModel() { Model = new PowerUserModel() };
return View(model);

并且在您看来,您使用 EditorFor

@model WebApplication.Models.ComboEndModel
@Html.EditorFor(m => m.Model)

根据类型模型是什么,它将选择关联的编辑器模板并应用该派生类型的注释。在这种情况下,您需要在 EditorTemplates 文件夹中使用名为 PowerUserModel.cshtml 且模型类型为 PowerUserModel

的部分 View

关于c# - MVC - 具有接口(interface)和注释的嵌套模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275957/

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