将TagHelpers嵌套在ASP.NET Core MVC 6中
|
ASP.NET Core TagHelper documentation提供了以下示例: public class WebsiteContext
{
public Version Version { get; set; }
public int CopyrightYear { get; set; }
public bool Approved { get; set; }
public int TagsToShow { get; set; }
}
[TargetElement("website-information")]
public class WebsiteInformationTagHelper : TagHelper
{
public WebsiteContext Info { get; set; }
public override void Process(TagHelperContext context,TagHelperOutput output)
{
output.TagName = "section";
output.Content.SetContent(
$@"<ul><li><strong>Version:</strong> {Info.Version}</li>
<li><strong>Copyright Year:</strong> {Info.CopyrightYear}</li>
<li><strong>Approved:</strong> {Info.Approved}</li>
<li><strong>Number of tags to show:</strong> {Info.TagsToShow}</li></ul>");
output.TagMode = TagMode.StartTagAndEndTag;
}
}
然后可以在Razor .cshtml中使用它,如下所示: <website-information info="new WebsiteContext {
Version = new Version(1,3),CopyrightYear = 1790,Approved = true,TagsToShow = 131 }"/>
这将生成以下HTML: <section>
<ul>
<li><strong>Version:</strong> 1.3</li>
<li><strong>Copyright Year:</strong> 1790</li>
<li><strong>Approved:</strong> true</li>
<li><strong>Number of tags to show:</strong> 131 </li>
</ul>
</section>
这是非常丑陋的标记助手语法.有没有办法嵌套另一个标记帮助器并获得完全的智能,以便网站信息的唯一允许子项可以是上下文?见下面的例子: <website-information>
<context version="1.3" copyright="1790" approved tags-to-show="131"/>
</website-information>
在我的用例中,website-information元素已经有很多属性,我想添加一个或多个单独的嵌套元素. UPDATE 我在ASP.NET GitHub页面上提出了this建议,以便为TagHelpers实现此功能. 解决方法您当然可以嵌套标记帮助程序,但可能其他选项(如视图组件,部分视图或显示模板)可能更适合OP描述的方案.这可能是一个非常简单的子标记助手: [HtmlTargetElement("child-tag",ParentTag="parent-tag")]
public class ChildTagHelper : TagHelper
{
public string Message { get; set; }
public override void Process(TagHelperContext context,TagHelperOutput output)
{
// Create parent div
output.TagName = "span";
output.Content.SetContent(Message);
output.TagMode = TagMode.StartTagAndEndTag;
}
}
这也可能是另一个简单的父标记助手: [HtmlTargetElement("parent-tag")]
[RestrictChildren("child-tag")]
public class ParentTagHelper: TagHelper
{
public string Title { get; set; }
public override async Task ProcessAsync(TagHelperContext context,TagHelperOutput output)
{
output.TagName = "div";
// Add some specific parent helper html
var header = new TagBuilder("h1");
header.Attributes.Add("class","parent-title");
header.InnerHtml.Append(this.Title);
output.PreContent.SetContent(header);
// Set the inner contents of this helper(Will process any nested tag helpers or any other piece of razor code)
output.Content.SetContent(await output.GetChildContentAsync());
}
}
在剃刀视图中,您可以编写以下内容: <parent-tag title="My Title">
<child-tag message="This is the nested tag helper" />
</parent-tag>
哪个将呈现为: <div>
<h1 class="parent-title">My Title</h1>
<span>This is the nested tag helper</span>
</div>
您可以选择强制标记帮助程序以特定方式嵌套: >在父标记帮助程序中使用[RestrictChildren(“child-tag”,“another-tag”)]来限制允许的嵌套标记帮助程序>在声明子标记帮助程序时强制使用嵌套在特定父标记内的标记[HtmlTargetElement(“child-tag”,ParentTag =“parent-tag”)]时使用ParentTag参数 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET – 如何在User Control中使用Response.Redirect()?
- iis – 加速asp.net开发服务器
- asp.net-mvc – 在VS 2015中添加视图上下文菜单非常慢
- Asp.net 文件上传类(取得文件后缀名,保存文件,加入文字水印
- WF4 – 在asp.net中显示工作流图像,并突出显示活动
- asp.net-mvc – HttpCache vs Singleton – MVC应用程序的最
- asp.net-mvc-4 – ASP.NET MVC Web Api无法将QueryString映
- 单元测试ASP.NET MVC 2路线与AreaRegistration.RegisterAll
- asp.net – System.Web.UI.ViewStateException,无效的views
- 休息 – OData与GraphQL GraphQL比较OData有什么优势?
- asp-classic – 从头开始在Visual Studio 2010中
- ASP.NET MVC 2中的asp.net-mvc-2 – LazyList vs
- Asp.net – 尝试访问工作网页时出错
- ASP.NET MVC 4实体框架6 SQL Compact Edition 4.
- 如何在ASP.NET MVC中渲染HTML字符串?
- 如何使用ASP.NET MVC实现站点而不使用Visual Stu
- asp.net-mvc-5 – MVC5中的域路由
- ASP.NET清空缓存时遇到的问题简析
- asp.net-mvc – 404 Asp.Net中的Http错误处理程序
- 如何为Asp.Net中的所有子文件夹注册HttpHandler?
