0

我有一块 HTML 需要在页面上的多个位置呈现,我正在寻找一种只定义该 HTML 一次的方法。我不能简单地依赖循环,因为 HTML 出现在不同的区域。

我知道我可以使用局部视图。但由于 HTML 块将只显示一页,我更愿意在那里定义它。

我知道我可以创建一个@functions块来创建一个函数来呈现标记,但这适用于代码而不是标记。我想要一些更像@helperMVC 中的函数,但这些似乎在 Razor Pages 中不可用。

任何人都可以提供其他建议来在一个地方定义一个 HTML 块,以便它可以显示在页面上的任何地方吗?

4

2 回答 2

3

如果您正在使用 .NET Core 3,则可以在@functions块中声明的方法中包含 HTML 标记,例如

@functions{
    void Greeter()
    {
        <h3>Hello World</h3>
    }
}

然后在页面的内容部分:

@{ Greeter(); }

helper 的种类也可以带参数:

void Greeter(string greeting)
{
    <div>@greeting World</div>
}

@{ Greeter("Hello"); }

如果您使用的是 ASP.NET Core 2.x,您的“帮助”方法是一个Func<someType, IHtmlString>. 在以下示例中,someType是 a string

Func<string, IHtmlContent> Greeter = @<h1>Hello @item</h1>;

然后在页面的内容部分:

@Greeter("World");

someType可以是复杂类型:

Func<Contact, IHtmlContent> Greeter = @<h1>Hello @item.FirstName</h1>;
于 2019-11-02T19:51:30.817 回答
-1

模板标签可以帮助:

<template id="block-template">
    <div>
        <p>template contents...</p>
    </div>
</template>

<div id="target1"></div>

<script>
    var tmplt = $("#block-template").html();
    $("#target1").append(tmplt);
</script>

template标签在 HTML5 中可用,您也可以使用脚本模板:

<script id="block-template" type="text/template">
    <div>
        <p>template contents...</p>
    </div>
</template>

如果您需要将数据绑定到模板,可以使用很多插件:

http://handlebarsjs.com/

https://github.com/jcgregorio/stamp/

https://knockoutjs.com/documentation/template-binding.html

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template

于 2019-11-02T06:03:38.583 回答