首页 > 解决方案 > 模型绑定嵌套对象

问题描述

我正在使用 ViewModel 将数据从 HTML 表单获取到 MVC 控制器。在 ActionResult 参数中,有一个 ViewModel 被填充,它工作正常。

现在,除了视图模型之外,我还想将视图模型的一个字段分开。可能吗?换句话说,我想要一个 MyViewModel.MyModel.Id 的副本到另一个 actionresult 参数中。

这是工作的控制器方法:

public ActionResult Edit(AuditViewModelCritereViewModel model){}

现在我想要这种方法

public ActionResult Edit(AuditViewModelCritereViewModel model, int auditId){}

以下是模型:

public class AuditViewModelCritereViewModel
    {
        public AuditViewModel audit { get; set; }
        ...
    }

public class AuditViewModel 
    {
        public int auditId { get; set; }
        ...
    }

我可以通过添加 HiddenField 来实现这一点,但 clean 是最好的,我想让它比复制 HTML id 值更漂亮。

在 HTML 表单中,这里是字段:

<input data-val="true" id="audit_auditId" name="audit.auditId" type="hidden" value="10">

这是我们感兴趣的 HTTP 请求内容:

http头

到目前为止,这是我尝试过的 int 参数:

谢谢您的帮助。

标签: asp.net-mvcasp.net-mvc-4model-bindingasp.net-mvc-viewmodel

解决方案


对的,这是可能的

 <input data-val="true" id="audit_auditId" name="auditId" type="hidden" value="10">

取要在操作参数中获取数据的输入字段的相同名称。

动作参数名称和字段名称应相同。它会正常工作

或者

您可以通过在控制器中使用绑定属性来获得这些东西

public ActionResult Edit(AuditViewModelCritereViewModel model, [Bind(Prefix = "audit.auditId")]int auditId) { }

推荐阅读