我有2个模型代表数据库中的2个不同的表。我想在一个视图中更改这两个模型。我知道我可以将两个模型合并为一个并将其传递给视图,但我的视图应该接受IList<>
。问题是我不确定如何在视图中使用组合模型。
我的组合模型看起来像这样:
public class FORM2_COMMON
{
public IEnumerable<FORM_2_SEC_1> FORM2_SEC1 { get; set; }
public IEnumerable<FORM_2_SEC_2> FORM2_SEC2 { get; set; }
}
在我的控制器中我有:
public ActionResult EditReport(ReportParam param)
{
FORM2_COMMON common = new FORM2_COMMON();
common.FORM2_SEC1 = db.FORM_2_SEC_1.Where(e => e.YEAR == param.Year && e.MONTH == param.SelectedMonth).OrderBy(e => e.LINE_CODE).ToList();
common.FORM2_SEC2 = db.FORM_2_SEC_2.Where(e => e.YEAR == param.Year && e.MONTH == param.SelectedMonth).OrderBy(e => e.LINE_CODE).ToList();
return PartialView(common);
}
然后将表格汇总:
[HttpPost]
public ActionResult EditReportSubmit(FORM2_COMMON report)
{
if (ModelState.IsValid)
{
foreach (FORM_2_SEC_1 sec1 in report.FORM2_SEC1)
{
db.Entry(sec1).State = EntityState.Modified;
}
foreach (FORM_2_SEC_2 sec2 in report.FORM2_SEC2)
{
db.Entry(sec2).State = EntityState.Modified;
}
db.SaveChanges();
return RedirectToAction("ReportForm2", "OPSReports");
}
return View(report);
}
在视图中:
@model Proj.Models.FORM2_COMMON
@for (var i = 0; i < Model.Count; i++) //confused here
{
<tr> </tr>
}
现在我不知道如何分别遍历Model.FORM2_SEC1
和Model.FORM2_SEC2
。
当我将一个模型传递给视图时,一切都很简单,我通常编码如下:
@model IList<FORM_2_SEC_1>
@for (var i = 0; i < Model.Count; i++)
{
<tr>
<td> @Html.DisplayFor(x=>x[i].TITLE)</td>
......
</tr>
}
我还有模型的编辑模板(FORM_2_SEC_1.cshtml
):
@model FORM_2_SEC_1
<tr>
<td> @Html.DisplayFor(x => x.TITLE)</td>
.......
</tr>
那么我如何为我的组合模型应用相同的逻辑呢?
我很感激任何帮助
答案 0 :(得分:0)
您可以通过以下模型访问属性:Model.FORM2_SEC1.xxx
@model Proj.Models.FORM2_COMMON
// iterate FORM2_SEC1 - same goes for FORM2_SEC2.
@for (var i = 0; i < Model.FORM2_SEC1.Count(); i++)
{
<tr> </tr>
}
或使用foreach循环,它可以直接访问项目,而不是通过索引访问它。
@foreach(var item in Model.FORM2_SEC1)
{
<tr>
<td>@item.SomeValue</td>
</tr>
}
对于FORM2_SEC1和FORM2_SEC2,这种方法是相同的,因为它们都是一个列表。
修改强>
回发时列表为空。
尝试添加一组隐藏值以填充对象的静态字段。
@for(int i = 0; i < Model.FORM2_SEC1.Count(); i++)
{
@Html.HiddenFor(item => m.FORM2_SEC1[i].Id)
@Html.TextBoxFor(m => m.FORM2_SEC1[i].Title)
}
答案 1 :(得分:0)
您可以使用foreach语句或for ...
简单地迭代您的集合FOREACH:
@foreach(var x in model.FORM2_SEC1) {
// Do whatever you want with x
}
有关:
@for(int i=0;i<model.FORM2_SEC1.Count;i++) {
// Do whatever you want
}
但是,如果您正在尝试编辑或显示信息,那么剃须刀有一种更简单的方法。创建编辑器或显示模板:http://www.hanselman.com/blog/ASPNETMVCDisplayTemplateAndEditorTemplatesForEntityFrameworkDbGeographySpatialTypes.aspx
然后你可以打电话:
@Html.EditorFor(model => model.FORM2_SEC1)