我可以在局部视图中使用局部视图吗?

时间:2017-11-17 19:07:47

标签: asp.net-mvc razor

我使用局部视图,并且我有一些Razor代码将在局部视图中使用很多次...我可以在此局部视图中使用局部视图吗?

或者有更好的方法来做到这一点?

当我尝试这样做时:

这是主页:

@model List<GolTripulacao.WebApi.Areas.LOG.Controllers.HomeController.Campo>

@{
    ViewBag.Title = "Relatorio";
}


<div>
    <div class="container">
        <div class="row">
            <div class="col-lg-8">
                <input type="text" id="" name="" />
            </div>
            <div class="col-lg-4">
                <div>
                    @Html.Partial("~/Areas/LOG/Views/Home/PhonePreview.cshtml", Model)
                </div>
            </div>
        </div>
    </div>
</div>

谁使用局部视图:

@{
    Layout = null;
}

<div>
    <div style="border:1px solid black;font-size:20px;overflow:auto;">        

        @if (Model != null)
        {
            <div class="container" style="background-color:orangered;padding-top:5px;padding-bottom:5px;">
                <div class="row">
                    <div class="col-sm-12">
                        @ViewBag.Relatorio
                    </div>
                </div>
            </div>

            foreach (var campo in Model)
            {
                if (campo.Tipo == "Text")
                {
                    @Html.Partial("~/Areas/LOG/Views/Home/text.cshtml", campo)
                }        

            }
        }

    </div>

</div>


<style>

    input[type=date]::-webkit-inner-spin-button {
        -webkit-appearance: none;
        display: none;
    }

</style>

而这部分称之为另一部分

<div class="container" style="padding-top:5px;padding-bottom:5px;">
    <div class="row">
        <div class="col-sm-4">
            @model.Name:
        </div>
        <div class="col-sm-8" style="text-align:right;">
            <input type="text" style="width:100%;" />
        </div>
    </div>
</div>

给了我一个错误:

'HtmlHelper<dynamic>' has no applicable method named 'RenderPartial' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax

问候!!

圣拉斐尔

1 个答案:

答案 0 :(得分:4)

您收到该错误,因为您的部分视图未进行强类型输入。

您需要对传入的数据进行强类型化。

您正在将主页的模型传递给第一个局部视图。您的模型是Campo的列表。因此,您的第一个局部视图也应该强类型为该类型(List<Campo>)。

将此行添加为第一个部分视图(PhonePreview.cshtml

中的第一行
@model List<GolTripulacao.WebApi.Areas.LOG.Controllers.HomeController.Campo>

PhonePreview.cshtml局部视图中,当您的if条件返回true时,循环传递给它的项目并调用text.cshtml局部视图。在这里,您将一个简单的Campo对象传递给文本局部视图。所以它应该强烈输入Campo类型。

将此行添加为第一个部分视图(text.cshtml

中的第一行
@model GolTripulacao.WebApi.Areas.LOG.Controllers.HomeController.Campo

。此外,您应该访问名称属性,如Model.Name,而不是model.Name

@model GolTripulacao.WebApi.Areas.LOG.Controllers.HomeController.Campo
    <div class="col-sm-4">
        @Model.Name
    </div>