如何在MVC4中调用父视图中的多个部分?

时间:2018-05-08 08:55:38

标签: asp.net-mvc

我试图在父视图中调用多个部分。我尝试了多种方法,但无法成功。我认为View中缺少一些东西。请指导我哪里出错了。

注意:我在问题中有部分内容。请建议我。

以下错误:

  

System.InvalidOperationException:'传递给的模型项   字典的类型为“Aplication.Models.ABC.ClsA'”,但是这个   字典需要类型的模型项   ' System.Collections.Generic.IEnumerable`1 [Aplication.Models.ABC.first]''

模型

public class ClsA
{        
    public List<first> firsts{ get; set; }    
    public List<second> seconds{ get; set; }
}

public class first
{     
    public string Name { get; set; }
    public string Address { get; set; }

}

public class second
{
    public string Details{ get; set; }
    public string Age{ get; set; }             
}

控制器

 public ActionResult ABC()
    {
        SDetails sDetails=new SDetails();        
        var model = new ClsA();
        model.firsts = sDetails.Rst();            
        model.seconds = sDetails.Rs();           
        return View(model);
    }

查看

 @model Aplication.Models.ABC.ClsA 

  @Html.Partial("_PartialA");           
  @Html.Partial("_PartialB.cshtml")

_PartialA

@model  IEnumerable<Aplication.Models.ABC.first>

    <table>
        <tr>
           <th>@Html.DisplayNameFor(m => m.Name)</th>
            <th>@Html.DisplayNameFor(m => m.Address)</th>            
        </tr>

        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Name)
                </td>
                <td>                   
                    @Html.DisplayFor(modelItem => item.Address)                    
                </td>                

            </tr>
        }
    </table>

_PartialB

@model  IEnumerable<Aplication.Models.ABC.second>

    <table>
        <tr>
           <th>@Html.DisplayNameFor(m => m.Details)</th>
            <th>@Html.DisplayNameFor(m => m.Age)</th>            
        </tr>

        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Details)
                </td>
                <td>                   
                    @Html.DisplayFor(modelItem => item.Age)                    
                </td>                

            </tr>
        }
    </table>

2 个答案:

答案 0 :(得分:2)

@Html.Partial()采用第二个参数model。如果您未将参数传递给@Html.Partial(),它将自动传递当前视图的模型。

  

参数

     

<强>的HtmlHelper   键入:System.Web.Mvc.HtmlHelper   此方法扩展的HTML帮助程序实例。

     

<强> partialViewName   键入:System.String   要渲染的局部视图的名称。

     

<强>模型   键入:System.Object   部分视图的模型。

您需要从

更新代码
@Html.Partial("_PartialA");           
@Html.Partial("_PartialB");

@Html.Partial("_PartialA", Model.firsts);           
@Html.Partial("_PartialB", Model.seconds)

您无需将文件扩展名传递给@Html.Partial方法

答案 1 :(得分:0)

这是加载局部视图的示例。控制器具有在部分视图中加载数据的操作。

public ActionResult List()
        {

            var movies = db.Movies;


            return PartialView("_list", movies.ToList());

        }

在部分_list视图中,您可以使用 -

 @model IEnumerable<WebApplication1.Models.Movie>


 <div class="row">
    <table class="table  table-bordered table-hover" id="moviesTable">
        <thead>
            <tr>
                <th>

                    @Html.DisplayNameFor(model => model.ID)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Title)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.ReleaseDate)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Genre)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Price)
                </th>

                <th></th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>
                        @Html.DisplayFor(modelItem => item.ID)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Title) 

                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.ReleaseDate)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Genre)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Price)
                    </td>


                    <td>
                        <div class="btn-group btn-group-xs">
                            <a href="#" class="btn btn-danger delete-row" data-item="@item.ID"><i class="fa fa-trash-o"></i></a>
                            <a href="@Url.Action("Edit", new { id = item.ID } )" class="btn btn-info"> <i class="glyphicon glyphicon-pencil"></i> Edit </a>

                            <a href="@Url.Action("Details", new { id = item.ID } )" class="btn btn-success"> <i class="glyphicon glyphicon-eye-open"></i> View </a>

                            <a href="@Url.Action("DeleteInline", new { id = item.ID } )" class="btn btn-danger" onclick="return confirm('Are you sure to delete?')"> <i class="glyphicon glyphicon-trash"></i> Delete</a>


                        </div>
                    </td>
                </tr>
            }
        </tbody>
    </table>

</div>

现在您可以在主视图中渲染局部视图,如下所示 -

    <div class="row">
    <div class="col-md-12" id="replacetarget">
        @{ Html.RenderAction("List", "Movies"); }

    </div>

</div>