我正在开发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)
{
}
如何获得?
答案 0 :(得分:0)
在渲染视图时,请务必使用类似Html.HiddenFor()
之类的内容将表单提交期间要保留的任何字段呈现为隐藏字段,如果它们尚未在表单上表示为{ {1}},input
,select
等
此外,当您来渲染重复元素(发票)时,请使用索引(不是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
}