处理 _Partial Page 的请求时发生未处理的异常

顶级页面视图名为“Create.cshtml”


在该页面上,我需要放置多个 _partialViews.cshtml 我使用剃须刀页面制作的:


<div>

    <row>

         <div class="col-md-6">

            @await Html.PartialAsync("~/Views/Shared/_PartialDelegates")

         </div>

         <div class="col-md-6">

            @await Html.PartialAsync("~/Views/Shared/_PartialApps")

        </div>

    </row>

</div>

现在的问题是我正在尝试使用 _PartialDelegates.cs 调用 _PartialDelegates.cshtml


_PartialDelegates.cshtml


@page

@model IMP.ECR.WEB.Views.Shared._PartialDelegatesModel

@{

}

<partial name="_PartialDelegatesView" model="Model.Avengers" />

哪个调用_PartialDelegates.cshtml.cs


using Microsoft.AspNetCore.Mvc.RazorPages;


namespace IMP.ECR.WEB.Views.Shared

{

    public class _PartialDelegatesModel : PageModel

    {

    public List<string> Avengers = new List<string>();      



    public void OnGet()

    {

        Avengers.AddRange(new[] { "Spiderman", "Iron Man", "Dr. Stange", "The Hulk" });

    }

    }

  }

}

然后在 _PartialDelegatesView.cshtml 我有以下内容:


@model List<string>

<div class="col-md-12">

    <h2>Avengers</h2>

    <table class="table table-boardered table-striped" style="width:100%">

        @foreach (var item in Model)

        {

            <tr>

                <td>@item</td>

            </tr>

        }

    </table>

</div>


千巷猫影
浏览 83回答 3
3回答

慕的地6264312

将 Razor 页面加载为部分视图似乎是不可能的,请参阅此处。Razor 页面不能用作View Components的替代品。按照以下步骤创建一个PartialDelegatesViewComponent,它可以做你想做的事情。1.创建ViewComponens文件夹并在文件夹中添加PartialDelegates.cs类public class PartialDelegates:ViewComponent{&nbsp; &nbsp; public IViewComponentResult Invoke()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; List<string> Avengers = new List<string>();&nbsp; &nbsp; &nbsp; &nbsp; Avengers.AddRange(new[] { "Spiderman", "Iron Man", "Dr. Stange", "The Hulk" });&nbsp; &nbsp; &nbsp; &nbsp; return View(Avengers);&nbsp; &nbsp; }}2.Default.cshtml添加到路径 /Views/Shared/Components/PartialDelegates/Default.cshtml(如果文件夹不存在则创建)@model List<string><h1>Default</h1><partial name="_PartialDelegatesView" model="Model" />3.在你的 Create.cshtml 中,调用视图组件@await Component.InvokeAsync("PartialDelegates")

呼如林

将 Razor 页面加载为部分视图似乎是不可能的,请参阅此处。Razor 页面不能用作View Components的替代品。按照以下步骤创建一个PartialDelegatesViewComponent,它可以做你想做的事情。1.创建ViewComponens文件夹并在文件夹中添加PartialDelegates.cs类public class PartialDelegates:ViewComponent{&nbsp; &nbsp; public IViewComponentResult Invoke()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; List<string> Avengers = new List<string>();&nbsp; &nbsp; &nbsp; &nbsp; Avengers.AddRange(new[] { "Spiderman", "Iron Man", "Dr. Stange", "The Hulk" });&nbsp; &nbsp; &nbsp; &nbsp; return View(Avengers);&nbsp; &nbsp; }}2.Default.cshtml添加到路径 /Views/Shared/Components/PartialDelegates/Default.cshtml(如果文件夹不存在则创建)@model List<string><h1>Default</h1><partial name="_PartialDelegatesView" model="Model" />3.在你的 Create.cshtml 中,调用视图组件@await Component.InvokeAsync("PartialDelegates")

米琪卡哇伊

您需要删除@page指令_PartialDelegates.cshtml以使局部视图正常工作。但问题是_PartialDelegatesModel&nbsp;OnGet永远不会调用方法,因此Avengers不会实例化列表。似乎不可能将这样的剃须刀页面用作局部视图,只有常规的剃须刀视图适合此目的。如果您需要在呈现页面之前实例化一些值,那么根据文档(“重要”部分)如果您需要执行代码,请使用视图组件而不是局部视图。
打开App,查看更多内容
随时随地看视频慕课网APP