如何在MVC中的单个对象中获取父类值及其子集合值?

时间:2014-09-01 08:03:57

标签: asp.net-mvc asp.net-mvc-4

我正在开发MVC应用程序。

当我单击表单上的“提交”按钮时,我希望通过其子集合获取整个对象。

请查看以下查看模型。

我有以下视图模型。

       public class AdviceCreateVM
        {      
            [Key]
            public int Id { get; set; }
            public string AdviceNo { get; set; }
            public  ICollection<InvoiceVM> Invoices { get; set; }
         }


   public class InvoiceVM
    {
        [Key]
        public int Id { get; set; }
        public string InvoiceNumber { get; set; }
        public double TotalAmount { get; set; }
    }

现在,我有一个Paymentadvice控制器的方法创建,它接受来自视图的输入。

    [HttpPost]
    public ActionResult Create(AdviceCreateVM AdviceCreateVM,InvoiceVM invoiceVM)
    {
    }

在上面的menthod中,我以数组的形式获得了Invoice集合的值。

但我有需要。那个,我应该只在单个对象中获得Advice创建和Invoice集合。如下方法。

    [HttpPost]
    public ActionResult Create(AdviceCreateVM AdviceCreateVM)
    {
    }

如何获得?

2 个答案:

答案 0 :(得分:0)

在渲染视图时,请务必使用类似Html.HiddenFor()之类的内容将表单提交期间要保留的任何字段呈现为隐藏字段,如果它们尚未在表单上表示为{ {1}},inputselect

此外,当您来渲染重复元素(发票)时,请使用索引(不是textarea循环)在for循环中执行此操作。理想情况下create an EditorFor template呈现视图的一部分,负责输入每个foreach。同样,确保您希望在表单提交期间携带的任何字段都呈现为隐藏字段。

例如:

invoice

编辑器模板(&#39; _Invoice&#39;,存储在&#39; EditTemplates&#39;文件夹中)将类似于:

@Html.HiddenFor(m => m.Id)
@Html.LabelFor(m => m.AdviceNo)
@Html.TextBoxFor(m => m.AdviceNo)

@for (var index = 0; index < Model.Invoices.Count; index++)
{
    @Html.EditorFor(m => m.Invoices[index], "_Invoice")
}

使用编辑器模板也可以更轻松地处理子对象的任何MVC验证,并避免一些类似的陷阱。

答案 1 :(得分:-1)

您可以创建单个ViewModel,并将这两个类作为其字段

添加到该模型中
public class YourViewModel
    {
       public YourViewModel()
       {
        this.adviceCreateVM = new AdviceCreateVM ();
        this.invoiceVM = new InvoiceVM();
       }

       public AdviceCreateVM adviceCreateVM { get; set; }
       public InvoiceVM  invoiceVM { get; set; }
    }

传递此模型以查看并将其作为

返回
[HttpPost]
public ActionResult Create(YourViewModel model)
{
//access both classes as model.adviceCreateVM and model.invoiceVM
}