加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – Razor Helpers与代码块共享html问题

发布时间:2020-12-16 07:09:53 所属栏目:asp.Net 来源:网络整理
导读:我想我想做的是“链接”我的数据,以便最终看起来一样. 我的所有 HTML必须以某种形式包装 fieldset class="" data-role="" 所以我有一个帮助打印各种形式.一个是标签: fieldset data-role="@role" label@Html.Raw(label)/label/fieldset 现在我有多种类型的
我想我想做的是“链接”我的数据,以便最终看起来一样.
我的所有 HTML必须以某种形式包装

<fieldset class="" data-role="">

所以我有一个帮助打印各种形式.一个是标签:

<fieldset data-role="@role">
    <label>@Html.Raw(label)</label>
</fieldset>

现在我有多种类型的标签,其中一种包括代码块.当它是一个
简单的文字,如“名字”我做的:

@FieldSet.Label("First Name")

但是,当我有一个代码块,如:

<b>some text</b>
<p>some other text (some time frame - some time frame)

使用它变得复杂:

@FieldSet.Label("<b>" + Model.Text1 + "</b><p>" + Model.Text2 + 
    " (" + Model.Time1 + " - " + Model.Time2 +")</p>")

我想要一个看起来像这样的解决方案:

@FieldSet.Label(@<text>
<b>@Model1.Text1</b>
<p>@Model.Text2 (@Model.Time1 - @Model.Time2)</p>
</text>)

我在某个地方看到这是可能的,但我找不到这篇文章.我可能完全被误导,但我真的不想在后面的代码中有一段HTML,我想利用剃刀语法,而不是字符串连接.

解决方法

查看Phil Haack的这篇文章

> http://haacked.com/archive/2011/02/27/templated-razor-delegates.aspx
> http://haacked.com/archive/2011/04/14/a-better-razor-foreach-loop.aspx

你可以:

写为强类型HtmlHelper的扩展方法:

public static class RazorExtensions
{
    public static HelperResult Label<T>(this HtmlHelper<T> helper,Func<T,HelperResult> template) {
        return new HelperResult(writer => {
            writer.Write("<label>");
            template(helper.ViewData.Model).WriteTo(writer);
            writer.Write("</label>");
        });
    }
}

所以你可以写

@Html.Label(@<text><span>@Model.Item1<span><strong>@Model.Item2</strong></text>)

将Model作为辅助方法的参数传递

public static class FieldSet
{
    public static HelperResult Label<T>(this T model,HelperResult> template) {
        return new HelperResult(writer => {
            writer.Write("<label>");
            template(model).WriteTo(writer);
            writer.Write("</label>");
        });
    }
}

用法:

@FieldSet.Label(Model,@<div><span>@Model.UserName</span><strong>@Model.FullName</strong><p>@Model.Description</p></div>)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读