ASP.NET MVC 2使用接口强类型化部分

时间:2011-03-23 09:33:24

标签: asp.net asp.net-mvc-2 viewmodel partials

我正在尝试ASP.NET MVC2,特别是viewmodels和partials。我的问题是:如果视图使用了部分,那么让部分强烈地键入接口并使视图模型实现该接口是“有效”还是“正确”?

为了说明,我说在“编辑”和“创建”视图中都使用了“部分产品”(对IProductFormViewModel强类型)。这些视图是针对实现IProductFormViewModel的ProductEditViewModel和ProductCreateViewModel强类型的。

使用ProductCreateViewModel& ProductEditViewModel对象分别。


编辑: 如果partial有自己的专用viewmodel(ProductFormViewModel)和每个ProductEditViewModel& ProductCreateViewModel公开一个ProductFormViewModel类型的属性,该属性传递给partial,然后在提交表单时,ProductEditViewModel& Model的模型绑定。 ProductCreateViewModel不起作用,因为编辑和创建操作期望它们各自的对象类型......这就是该方法的原因。

4 个答案:

答案 0 :(得分:0)

是的,这似乎是一种有效的方法。

答案 1 :(得分:0)

接口本质上是需要通过实现类来实现的契约。但是在视图引擎的情况下,我没有看到让viewmodel实现接口的任何特定好处,因为最后你必须在控制器中实例化viewmodel并将其传递给视图并假设你改变了ProductFormViewModel或EditProductViewModel的实现,你仍然必须在控制器中实例化(填充)对象并将其传递给视图。所以它与我们在存储库模式中结合依赖注入实现的目的不同。如果你能通过这种方法告诉你究竟想要达到的目的,我们可能会提供帮助。

答案 2 :(得分:0)

你的方法很好。

或者您可以使用特定于您的部分和使用构图的模型,例如:

public class AddressModel
{
    public string Address { get; set; }
    public string Code { get; set; }
}

public class PersonModel
{
    public string Name { get; set; }
    public AddressModel Address { get; set; }
}

然后在重新调整你的部分时,你会传递正确的模型。

HTH

答案 3 :(得分:0)

当您的不同部分的界面公开相同的属性名称时,您可能会遇到问题,例如名称。然后,您必须明确地实现接口,这将导致模型绑定出现问题。

否则它应该有用。