视图中使用2@模型的Mvc

本文关键字:模型 Mvc 视图 | 更新日期: 2023-09-27 18:25:09

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

@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@模型,它将抛出异常

我想这样做,因为此视图将查看记录并创建新记录。谢谢

更新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
{
}

当我运行程序时,编译是可以的,但我在网页

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

视图中使用2@模型的Mvc

您可以创建一个包含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,以避免模型和现有记录之间的混淆。

使用子操作。这就是他们在那里的目的。它们只能用于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.cs.html

@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>
}