MVC在同一视图中使用相同的局部视图两次

时间:2010-06-17 19:23:45

标签: asp.net-mvc

我有一个名为“Adress”的强类型部分视图。此部分视图包含与Adress模型类关联的“输入”字段。我想在同一视图中渲染两次,因为用户必须输入业务地址和传递地址。

我遇到客户端验证问题,因为呈现的'input'的ID不是唯一的。

此外,我使用DataAnnotationModelBinder将模型返回到httppost。由于Request.Forms中的名称冲突,我无法获得这两个地址对象。

有没有办法设置一种范围,所以每个局部视图的'input'的id都有一个可由modelBinder识别的唯一ID?

1 个答案:

答案 0 :(得分:2)

我对验证问题和数据注释不感兴趣,但通常你可以使用这样的多个部分:

  • 构建一个聚合2个地址的Viewmodel。让我们说它的AddressViewData具有公共属性BusinessAddress和DeliveryAddress。两者都是Address类型。地址有一个附加属性“InstanceName”。使用“BusinessAddress”和“DeliveryAddress”

  • 填充InstanceName
  • 在视图中调用RenderPartial(“Address”,Model.BusinessAddress)和RenderPartial(“Address”,Model.DeliveryAddress)

  • Partial中的
  • 使用了像这样的东西

    Html.TextBox(Model.InstanceName +“。Street”)

结果是一个具有类似“BusinessAddress.Street”的名称属性的Formelement DefaultModelbinder将正确绑定它。您的操作应使用参数

public ViewResult CreateAddress(AddressViewData  addresData)