将局部视图插入另一个局部视图

时间:2015-11-05 06:28:27

标签: asp.net-mvc-4 razor asp.net-mvc-partialview

这是主视图Dept_Manager_Approval.cshtml,我在其中放置了一个显示数据的模式。

<td>
    <i title="View Details">
    @Ajax.ActionLink(" ", "ViewAccessStatus", new { id = item.request_access_id },
    new AjaxOptions
    {
        HttpMethod = "Get",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "edit-div",
    }, new { @class = "fa fa-eye btn btn-success approveModal sample" })</i> 
</td>

在这个只有模态的局部视图ViewAccessStatus.cshtml中,我在这里插入了另一个局部视图。

<div>
    <h2><span class ="label label-success">Request Creator</span> &nbsp; </h2>
    @if (Model.carf_type == "BATCH CARF") 
    { 
        @Html.Partial("Batch_Requestor1", new {id= Model.carf_id })

    }else{
       <h4><span class ="label label-success">@Html.DisplayFor(model=>model.created_by)</span></h4>
    }
</div>

控制器:

       public ActionResult Batch_Requestor1(int id = 0)
        {
            var data = db.Batch_CARF.Where(x => x.carf_id == id && x.active_flag == true).ToList();

            return PartialView(data);
        }

Batch_Requestor1.cshtml

@model IEnumerable<PETC_CARF.Models.Batch_CARF>

@{
    ViewBag.Title = "All Requestors";
}

<br/><br/>
<table class="table table-hover">
    <tr class="success">
        <th>
            @Html.DisplayName("Full Name")
        </th>
        <th>
            @Html.DisplayName("Email Add")
        </th>
        <th>
            @Html.DisplayName("User ID")
        </th>             
    </tr>

@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.fname) - @Html.DisplayFor(modelItem => item.lname)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.email_add)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.user_id)
        </td>
    </tr>
}
</table>

当我运行时,我有这个错误

  

传递到字典中的模型项的类型为'&lt;&gt; f__AnonymousType01 [System.Int32]',但此字典需要类型为'System.Collections.Generic.IEnumerable`1 [PETC_CARF.Models]的模型项。 Batch_CARF]”。

任何想法我将如何插入另一个局部视图?

1 个答案:

答案 0 :(得分:3)

@Html.Partial()呈现局部视图。它不会调用一个动作方法,而动作方法又会渲染部分动作。在你的情况下

@Html.Partial("Batch_Requestor1", new {id= Model.carf_id })

正在呈现名为Batch_Requestor1.cshtml的部分视图,并向其传递由new {id= Model.carf_id }(和匿名对象)定义的模型,但该视图需要一个IEnumerable<PETC_CARF.Models.Batch_CARF>的模型。

相反,您需要使用

@Html.Action("Batch_Requestor1", new {id= Model.carf_id })

调用方法public ActionResult Batch_Requestor1(int id = 0)并向其传递Model.carf_id的值,然后将其呈现部分视图。