繁体   English   中英

当父视图具有相同模型时,如何将局部视图中的 HTML 表单数据序列化?

[英]How do I get HTML form data in Partial View to be serialized when parent view has same model?

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

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

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

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

据我所知:

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

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

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

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

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

解决了,感谢您的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM