Asp.net mvc 视图模型设计

Asp.net mvc 视图模型设计,asp.net-mvc,viewmodel,Asp.net Mvc,Viewmodel,我有一个实体的创建页面和编辑页面。这些页面是相似的,因此我有一个基本视图模型,其中包含页面之间的公共字段,以及从基本视图继承的每个页面的视图模型 这两个页面之间的区别之一是创建页面有一个搜索表单,用户可以在其中输入条件并使用ajax查询进行搜索。搜索条件字段不是实体的一部分。我为不同的搜索条件创建了一个“SearchCriteria”子模型,它有自己的属性,这样我可以在执行搜索时简单地发布这个模型,并在将来可能添加更多的搜索条件,而无需修改方法参数 事实证明,我确实需要添加其他内容,但其他内容是

我有一个实体的创建页面和编辑页面。这些页面是相似的,因此我有一个基本视图模型,其中包含页面之间的公共字段,以及从基本视图继承的每个页面的视图模型

这两个页面之间的区别之一是创建页面有一个搜索表单,用户可以在其中输入条件并使用ajax查询进行搜索。搜索条件字段不是实体的一部分。我为不同的搜索条件创建了一个“SearchCriteria”子模型,它有自己的属性,这样我可以在执行搜索时简单地发布这个模型,并在将来可能添加更多的搜索条件,而无需修改方法参数

事实证明,我确实需要添加其他内容,但其他内容是基本视图模型的属性之一。我不知道最好的方法是什么。我想,我将不得不考虑这个属性不再是普通的,将它移到我的编辑视图模型和我的SeaSKeView模型中,但是我失去了对实体的公共映射,必须重复代码。 我想我可能在某个地方出了问题,所以一些设计建议将不胜感激


谢谢

我也遇到过类似的问题。首先,使用搜索功能。您可以创建一个
SearchServiceController
。然后,添加一个局部视图并在需要显示搜索栏时向其传递一个模型,否则传递null并不显示任何内容。通过这种方式,您可以通过将搜索功能保留在自己的流程中来分离关注点

至于添加一个不会被使用的属性,我觉得这不会带来太多问题。NET框架中充满了不实现部分基础的子类。相反,你可以投一个球。对我来说,为了获得一致性和干燥度,这是非常值得的


就个人而言,我发现在控制器之间共享viewmodels不是一件好事(但在这种情况下,您可能使用单个控制器)。将IoC与Ninject结合使用时,我在跨控制器将界面绑定到相同的viewmodels时会出现大量周期性冗余错误。出于这个原因,我拿出了Ninject。但是,也许你可以在另一层绑定……我还没有尝试过。

我也遇到过类似的问题。首先,使用搜索功能。您可以创建一个
SearchServiceController
。然后,添加一个局部视图并在需要显示搜索栏时向其传递一个模型,否则传递null并不显示任何内容。通过这种方式,您可以通过将搜索功能保留在自己的流程中来分离关注点

至于添加一个不会被使用的属性,我觉得这不会带来太多问题。NET框架中充满了不实现部分基础的子类。相反,你可以投一个球。对我来说,为了获得一致性和干燥度,这是非常值得的

就个人而言,我发现在控制器之间共享viewmodels不是一件好事(但在这种情况下,您可能使用单个控制器)。将IoC与Ninject结合使用时,我在跨控制器将界面绑定到相同的viewmodels时会出现大量周期性冗余错误。出于这个原因,我拿出了Ninject。但是,也许你可以在另一层绑定…还没有尝试过