我有一个实体的创建页面和编辑页面。页面是相似的,所以我有一个基本视图模型,其中包含页面之间的公共字段,以及每个页面的视图模型,从基继承。
这两个页面的区别之一是,创建页面有一个搜索表单,用户可以在其中输入条件并使用ajax查询进行搜索。搜索条件字段不是实体的一部分。我为不同的搜索条件创建了一个具有自己属性的"SearchCriteria"子模型,这样我就可以在执行搜索时简单地发布这个模型,并且在将来可能添加更多的搜索条件,而不必修改方法参数。
我确实需要添加其他东西,但那个东西是基视图模型的属性之一。我不知道最好的方法是什么。我认为我将不得不考虑该属性不再是通用的,并将其移动到我的Edit视图模型和我的SearchCriteria模型中,但是这样我就失去了到实体的公共映射,并且必须重复代码。
我想我可能在什么地方做错了,所以如果能给我一些设计上的建议就太好了。
谢谢
我也遇到过类似的问题。首先是搜索功能。可以创建SearchServiceController
。然后,添加一个局部视图,并在您想要显示搜索栏时传递给它一个模型,否则传递null并不显示任何内容。通过这种方式,您可以通过将搜索功能保持在自己的进程中来分离关注点。
至于添加一个不会使用的属性,我不觉得这有什么问题。. net框架中充满了不实现基类部分的子类。相反,你可以抛出一个NotImplementedException。对我来说,为了获得一致性和DRY,这是值得的。
就我个人而言,我发现在控制器之间共享视图模型并不是一件好事(但在这种情况下,您可能使用单个控制器)。在使用IoC和Ninject时,当跨控制器将接口绑定到相同的视图模型时,我得到了大量的循环冗余错误。出于这个原因,我选择了Ninject。但是,也许你可以在另一层绑定…