大家好我有一个视图,将数据填充到表格中 我在观点中有这个
@model IEnumerable<"Model">
我在视图中有类似的内容
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Audit_ID)
</td>
//rest of the code
</tr>
}
我的问题是如何在视图中输入内容
@model DAL.EODAuditModel
@model IEnumerable<"Model">
因为我想这样做
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Employee</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
</fieldset>
}
问题是我不能这样做因为我在视图中定义了2个@model会引发异常
我想要这个因为这个视图将查看记录并创建新记录。 感谢。
更新2:我根据建议编辑代码
型号代码:
public class EODAuditModel
{
public EODAuditModel()
{
this.ExistingRecords = new List<EODAuditModel>();
}
public int Audit_ID { get; set; }
[Required]
public string Description { get; set; }
[Required]
public string CreatedBy { get; set; }
public DateTime CreatedDate { get; set; }
public List<EODAuditModel> ExistingRecords { get; set; }
}
查看代码:
@foreach (var item in Model.ExistingRecords)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.CreatedBy)
</td>
</tr>
}
控制器代码:
public ActionResult Index()
{
EODAuditBL eodBl = new EODAuditBL();
List<EODAuditModel> eodModel = eodBl.GetEODAudit.ToList();
return View(eodModel);
}
GetEODAuditCode:
public IEnumerable<EODAuditModel> GetEODAudit
{
}
当我运行程序时编译没问题,但是我收到了这个错误 网页
传递到字典中的模型项是类型的 &#39; System.Collections.Generic.List`1 [DAL.EODAuditModel]&#39;,但是这个 字典需要类型为&#39; DAL.EODAuditModel&#39;的模型项。
答案 0 :(得分:8)
您可以创建一个包含IEnumerable<"Model">
和Name
属性的新模型类。
public class AuditViewModel
{
public AuditViewModel()
{
this.ExistingRecords = new List<EODAuditModel>();
}
public string Name { get; set; }
public List<EODAuditModel> ExistingRecords { get; set; }
}
在视图中定义模型,如下所示
@model AuditViewModel
并将foreach
块更改为此
@foreach (var item in Model.ExistingRecords)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Audit_ID)
</td>
//rest of the code
</tr>
}
<强>更新强>
看起来您收到了错误,因为在控制器中您向视图传递了List<DAL.EODAuditModel>
而不是DAL.EODAuditModel
的实例。将您的控制器更改为此
public ActionResult Index()
{
EODAuditBL eodBl = new EODAuditBL();
List<EODAuditModel> auditList = eodBl.GetEODAudit.ToList();
EODAuditModel model = new EODAuditModel();
model.ExistingRecords = auditList;
return View(model);
}
我将eodModel
更改为auditList
,以避免模型与现有记录混淆。
答案 1 :(得分:1)
使用子操作。这就是他们的目的。它们只能用于GET请求,因此对于类似的内容,视图的模型定义将是创建实例,而子操作的模型将是现有项的列表:
<强>控制器强>
public ActionResult Index()
{
var eodBl = new EODAuditBL();
return View(eodBl);
}
[ChildActionOnly]
public ActionResult ListEODAuditBLs()
{
// look up from database
var eodModel = db.EODAudits.ToList();
return PartialView(eodModel);
}
<强> Index.cshtml 强>
@model Namespace.To.EODAuditBL
@Html.Action("ListEODAuditBLs")
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Employee</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
</fieldset>
}
<强> ListEODAuditBLs.cshtml 强>
@model IEnumerable<Namespace.To.EODAuditBL>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.CreatedBy)
</td>
</tr>
}