FineUI 官方论坛
标题:
创建可包含HTML的 FineUI TagHelper
[打印本页]
作者:
棕榈
时间:
2020-4-1 15:15
标题:
创建可包含HTML的 FineUI TagHelper
本帖最后由 棕榈 于 2020-4-1 15:13 编辑
创建可包含HTML的 FineUI TagHelper
<f:SimpleForm ShowHeader="false" LabelWidth="80" BodyPadding="10" ShowBorder="false" ID="SimpleForm1">
<Items>
<f:Control>
<div class="input-group input-group-sm mb-3">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="f-icon f-iconfont f-iconfont-user"></i>
</span>
</div>
<input type="text" name="tbxUserName" class="form-control" placeholder="用户名">
</div>
</f:Control>
<f:TextBox ShowRedStar="true" Required="true" TextMode="Password" Label="密码" ID="tbxPassword"></f:TextBox>
</Items>
</f:SimpleForm>
复制代码
上面代码中的 f:Control 就是新创建的 TagHelper,它继承于 PanelBaseTagHelper ,为什么要创建这样一个 TagHelper 呢,它的主要功能是可以包含HTML内容,之前的做法是将HTML内容放到Body的其它位置,然后设置控件的 ContentEl 属性,这样查看起来不够直观,现在通过 f:Control 可以直接将HTML中嵌入在结构中,查看及编辑都一目了然。
下面是 ControlTagHelper 的代码:
using Microsoft.AspNetCore.Razor.TagHelpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FineUICore.EmptyProject.RazorPages.Code
{
[HtmlTargetElement("f:Control")]
public class ControlTagHelper : PanelBaseTagHelper
{
private readonly string _contentId;
public ControlTagHelper() : base(new Panel()
{
ShowBorder = false,
ShowHeader = false
})
{
_contentId = Guid.NewGuid().ToString();
ContentEl = [ DISCUZ_CODE_1 ]quot;#{_contentId}";
}
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
var contents = ViewContext.ViewBag.FINEUI_CONTROL_CONTENTS;
if (contents == null)
{
contents = new List<string>();
ViewContext.ViewBag.FINEUI_CONTROL_CONTENTS = contents;
}
var content = (await output.GetChildContentAsync()).GetContent();
contents.Add([ DISCUZ_CODE_1 ]quot;<div id="{_contentId}">{content}</div>");
await base.ProcessAsync(context, output);
}
}
}
复制代码
上面的代码也比较简单就是将HTML内容放入 ViewBag.FINEUI_CONTROL_CONTENTS 中,起这长的名称也是为了防止冲突。
下面是将HTML放到页面中的代码:
@if (ViewBag.FINEUI_CONTROL_CONTENTS is List<string> contents)
{
foreach (var content in contents)
{
@Html.Raw(content)
}
}
复制代码
你可以将其放到布局页面中,这样就不用每一个页面都添加了。
同时还要在 _ViewImports.cshtml 添加下面的代码:
@addTagHelper *, FineUICore.EmptyProject.RazorPages
复制代码
FineUICore.EmptyProject.RazorPages 是程序集的名称,可以改为自己程序集的
名称
。
完整项目文件请到知识星球下载。
作者:
sanshi
时间:
2020-4-2 17:57
这个尝试非常好。
下个版本(v6.3.0),我们会增加类似的ContentPanel标签帮助器,让FineUICore RazorPages的页面标签和WebForms更加一致。
作者:
kakaeex
时间:
2020-7-27 18:23
赞一个好的思路
欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/)
Powered by Discuz! X3.4