Mvc在视图中使用2 @model

CMi*_*nor 2 c# asp.net-mvc asp.net-mvc-5

大家好我有一个视图,将数据填充到表中我在我的视图中有这个

@model IEnumerable<"Model">
Run Code Online (Sandbox Code Playgroud)

在我看来,我有类似的东西

@foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Audit_ID)
            </td>
            //rest of the code
         </tr>
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在视图中输入这些内容

@model DAL.EODAuditModel
@model IEnumerable<"Model">
Run Code Online (Sandbox Code Playgroud)

因为我想这样做

@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>
}
Run Code Online (Sandbox Code Playgroud)

问题是我无法做到这一点因为我在视图中定义了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; }
    }
Run Code Online (Sandbox Code Playgroud)

查看代码:

@foreach (var item in Model.ExistingRecords)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Description)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CreatedBy)
            </td>

        </tr>
    }
Run Code Online (Sandbox Code Playgroud)

控制器代码:

public ActionResult Index()
        {
            EODAuditBL eodBl = new EODAuditBL();
            List<EODAuditModel> eodModel = eodBl.GetEODAudit.ToList();
            return View(eodModel);
        }
Run Code Online (Sandbox Code Playgroud)

GetEODAuditCode:

public IEnumerable<EODAuditModel> GetEODAudit
{
}
Run Code Online (Sandbox Code Playgroud)

当我运行该程序时,编译是正常的,但我在网页中收到此错误

传递到词典中的模型项的类型为"System.Collections.Generic.List`1 [DAL.EODAuditModel]",但是这需要字典类型"DAL.EODAuditModel"的模型项.

eka*_*kad 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; }
}
Run Code Online (Sandbox Code Playgroud)

在视图中定义模型,如下所示

@model AuditViewModel
Run Code Online (Sandbox Code Playgroud)

并将foreach块更改为此

@foreach (var item in Model.ExistingRecords)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Audit_ID)
        </td>
        //rest of the code
     </tr>
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

看起来你得到了错误,因为在控制器中你传递了一个实例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);
}
Run Code Online (Sandbox Code Playgroud)

我改变eodModel,以auditList避免模型和现有的记录之间的混淆.