如何在 ASP.NET Core Razor 页面中重用 HTML 片段?

4

我试图在我的Razor页面(视图组件)中重复使用HTML片段,但不知何故它从未调用或触发HTML部分中的断点。

我正在使用Asp.net core 2.2。

        @{
        Func<CategorySimpleModel, Microsoft.AspNetCore.Html.IHtmlContent> DisplayManufacturerPicture=
            @<div class="col-sm-4">
                <div class="row">
                    @foreach (var m in item.Manufacturers)
                    {
                        <div class="col-md-6 col-sm-12">
                            blah blah
                        </div>
                    }
                </div>
            </div>;
        }

   @foreach (var root in Model.Categories)
            { 
               DisplayManufacturerPicture (root);
            }

你可能想要查看Razor组件 - MindSwipe
那是 .NET Core 3.0 预览版,我只使用 2.2。 - nam vo
“但不知何故,在 HTML 部分它从未调用或触发断点。”你的意思是什么?你在 Func 内部放置了一个断点,但它没有被触发吗? - MindSwipe
是的,它从来没有命中过,我甚至尝试了一个简单的字符串func<string,IHtmlContent>。奇怪的是,虽然循环命中了DisplayManufacturerPicture,但它从来没有显示任何东西。 - nam vo
2个回答

2
一些方法只有在服务器端语法中调用时才能使用 "@", 其他符号无效。原始答案是 "最初的回答"。
 @if (root.Manufacturers.Count > 0)
{
   @DisplayManufacturerPicture(root);
}

1
你所尝试的做法目前还不可行。你应该考虑使用 局部视图 代替:
@foreach (var root in Model.Categories)
{
    <partial name="_DisplayManufacturerPicture" model="root" />
}

然后在_DisplayManufacturerPicture.cshtml文件中:

@model CategorySimpleModel

<div class="col-sm-4">
    <div class="row">
        @foreach (var m in item.Manufacturers)
        {
            <div class="col-md-6 col-sm-12">
                blah blah
            </div>
        }
    </div>
</div>

2
是的,我确实使用了很多部分视图,我试图做的是用新的asp.net替换旧的@helper的方法。您可以查看https://dotnetthoughts.net/how-to-reuse-html-snippets-in-cshtml-view/或https://dev59.com/p1wY5IYBdhLWcg3wq5fl。 - nam vo
部分视图不是遗留问题,也请注意我没有使用HtmlHelper。这一切都不是“旧的ASP.NET”。 - poke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接