1

我正在试验 ASP.NET MVC2,特别是视图模型和局部视图。我的问题是:如果视图使用局部视图,让你的局部视图强类型化接口并且让你的视图模型实现该接口是“有效”还是“正确”?

举例来说,假设我有一个 Product 表单部分(针对 IProductFormViewModel 进行强类型化),它在 Edit 和 Create 视图中都使用。这些视图是针对实现 IProductFormViewModel 的 ProductEditViewModel 和 ProductCreateViewModel 进行强类型化的。

好处是 Create 和 Edit 的相应 POST 操作分别采用 ProductCreateViewModel 和 ProductEditViewModel 对象。


编辑:如果部分有自己的专用视图模型(ProductFormViewModel),并且每个 ProductEditViewModel 和 ProductCreateViewModel 都公开一个传递给部分的 ProductFormViewModel 类型的属性,那么当提交表单时,ProductEditViewModel 和 ProductCreateViewModel 的模型绑定不起作用因为 Edit 和 Create 操作期望它们各自的对象类型......这就是该方法的原因。

4

4 回答 4

0

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

于 2011-03-23T09:42:01.387 回答
0

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

于 2011-03-23T09:45:20.893 回答
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; }
}

然后在重新渲染您的部分时,您将其传递给正确的模型。

高温高压

于 2011-03-23T09:58:39.080 回答
0

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

否则它应该工作。

于 2011-03-24T12:36:06.403 回答