0

我有一个视图,其中包含几个具有不同模型的部分视图,除了一个,它与父视图具有相同的模型。原因是,父视图代表一个风险,部分视图是根据风险是“电机”还是“非电机”来加载的。Motor 和 Non-Motor 局部视图都使用在 Risk 父视图中找到的相同模型。

我正在使用 Html.BeginCollectionItem 方法并在提交时序列化表单数据,以尝试在用于父视图模型的同一类中检索所述数据(风险)。提交设法收集除了在电机和非电机部分视图中找到的数据之外的所有数据。目标是在与父视图中的风险模型相同的对象中序列化电机/非电机部分视图中的数据,但是,当我调试接收方法时,部分视图中收集的所有属性要么为空或 0,尽管实际上在表单中输入了值。

如何让风险项包含所有数据,而不仅仅是在部分视图之外输入的数据?

4

2 回答 2

0

如果可以,请提供代码片段(以及关于您希望父视图和部分视图完成什么的附加信息),以便我们更好地了解您面临的问题并提供更准确的答案。

据我所知:

  • 您有一个包含多个部分视图的视图页面,但是您试图将这些部分视图包装在父视图的表单中,并且在尝试提交时,您在这两个部分视图中得到空值?

在不了解为什么以这种方式设计应用程序背后的业务背景的情况下,以下是我的建议:

  1. 创建一个 ViewModel 类,该类具有 Risk 类类型的属性、Risk 类型的属性(用于您的 Motor partialView)和 Risk 类型的属性(用于您的非电机 partialView)。
  2. 或者,如果您只需要提交特定部分(例如显示在父视图上的一个 partialView),您可以将该 partialView 包装在另一个表单元素中(例如 @Html.BeginForm{} 或 @Ajax.BeginForm{})并拥有他们分别提交。
于 2020-02-03T21:43:52.480 回答
0

所以我找到了一个可行的解决方案。事实证明,当数据被序列化时,Motor risk 的属性在对象的根级别被序列化。因此,虽然它应该被序列化为 Policy.Policy_Risk.risk_item_no 例如,它只是被序列化为 risk_item_no,这与我在控制器中接收的 Policy 对象冲突。

我通过以@name="Policy_Risk" + unique_id + ".risk_item_no" 的方式向表单中的每个项目添加名称属性来修复它

解决了,同样感谢您的帮助。

于 2020-02-04T14:42:18.573 回答