Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该如何实现一个带有“的模型?”;“动态特性”;使用mvc/razor?_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# 我应该如何实现一个带有“的模型?”;“动态特性”;使用mvc/razor?

C# 我应该如何实现一个带有“的模型?”;“动态特性”;使用mvc/razor?,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,如何使用mvc/razor实现具有“动态属性”的模型?我真的不确定“动态属性”是否是正确的术语 场景:我有一个DB中的项目列表。然后,从属性列表(也从数据库)中为每个项目提供一组“属性” 在我的项目模型中,我想我应该有一个属性集合,对吗?差不多 public class Item { public int ItemId { get; set; } public string ItemName{ get; set; } public virtual ICollectio

如何使用mvc/razor实现具有“动态属性”的模型?我真的不确定“动态属性”是否是正确的术语

场景:我有一个DB中的项目列表。然后,从属性列表(也从数据库)中为每个项目提供一组“属性”

在我的项目模型中,我想我应该有一个属性集合,对吗?差不多

public class Item
{

    public int ItemId { get; set; }
    public string ItemName{ get; set; }

    public virtual ICollection<Attribute> Attributes { get; set; }
}

public class Attribute
{
    public int AttributeId { get; set; }
    public string AttributeName { get; set; }
}
公共类项目
{
公共int ItemId{get;set;}
公共字符串ItemName{get;set;}
公共虚拟ICollection属性{get;set;}
}
公共类属性
{
公共int AttributeId{get;set;}
公共字符串AttributeName{get;set;}
}
我的目标是呈现一个视图,如果用户从dropdownlist中选择一个项目,那么与所选项目相关联的属性集将与相应的html输入元素(textbox或dropdownlist)一起显示

用户从下拉列表中选择项目时的示例UI(假设它是“照相机”)

  • 摄像机
    • 品牌-[文本框]
    • 型号-[文本框]
    • 保修-[保修期下拉列表]
用户从dropdownlist(假设它是“房屋”)中选择项目时的示例UI

  • 房子
    • 建筑面积-[文本框]
    • 房间数量-[文本框]
    • 房间数量-[文本框]
创建/编辑/删除像上面定义的属性这样的简单模型没有问题。让我不感兴趣的是实现上述“动态属性”的方法


我来自WebForms,对MVC还是一个新手,所以请放松点,好吗?:)

这种方法的名称简称为实体属性值或EAV。毫无疑问,您已经意识到,当您需要大量不同的元数据时,它是一种有用的方法,而不是每一项都有适用的元数据,或者简单的数据不可用。医疗行业经常使用这种方法来构建病历。以下是一篇维基百科文章:


结合ASP.Net MVC搜索,您可能会找到一些关于如何正确实现它的好资源。

事实证明,这可以像其他任何模型实现一样轻松完成。我只需要创建“项目模板”,其中包含属性和其他与项目属性相关的元数据。然后我要求用户选择一个“模板”,这样我就可以相应地更新属性列表和视图。之后,用户现在可以为模板中的每个属性填写相应的值。生成的模型与项目模板不同,因此涉及局部视图和编辑器模板

我知道这与问题无关,但我想值得一提的是,使用视图模型而不是域模型可以简化工作。很多

为了让事情变得更简单,我必须做的另一件事是使用面向文档的存储,而不是传统的关系数据库,因为我认为像这样的EAV类型的项目更适合NoSQL


我面临的下一个问题是如何根据属性的数据类型验证用户的输入。

谢谢您的回答!虽然这不应该像数据库中的一对多关系那样简单吗?然后让控制器执行逻辑,根据关联的项目属性生成必要的UI?可能!在处理你以前没有使用过的设计时,检查谷歌通常是一个好主意,因为偶尔会有一些哥特式风格的东西,在你遇到它们之前,有人可能会指出。是的!我同意!感谢您指出该方法称为EAV。最初的问题仍然存在,您将如何使用mvc/razor实现具有EAV(“动态属性”)的模型?