【问题标题】:model binding nested objects模型绑定嵌套对象
【发布时间】:2019-08-22 07:21:58
【问题描述】:

我正在使用 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 请求内容:

这是我迄今为止尝试过的 int 参数:

  • int auditId
  • int audit_auditId

感谢您的帮助。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 model-binding asp.net-mvc-viewmodel


    【解决方案1】:

    是的,有可能

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

    在要获取动作参数的数据的输入字段中采用相同的名称

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

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

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

    【讨论】:

    • "我可以通过添加 HiddenField 来实现这一点,但 clean 是最好的,我想让它比复制 HTML id 值更漂亮。"
    • 你应该试试这个对我有用 - public ActionResult Edit(AuditViewModelCritereViewModel model, [Bind(Prefix = "audit.auditId")]int auditId) { }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多