Joe*_*tte 18 c# asp.net-mvc asp.net-core-mvc asp.net-core
在我看来,从beta7开始,TagBuilder发生了重大变化,在公告回购中没有提到它们.
具体来说.ToString不再呈现tagbuilder,它只返回类型的名称.以前我们可以在HtmlHelper扩展中做这样的事情来构建嵌套的html元素:
var li = new TagBuilder("li");
li.AddCssClass("inactive");
var span = new TagBuilder("span");
span.SetInnerText(somestring);
li.InnerHtml = span.ToString();
Run Code Online (Sandbox Code Playgroud)
.InnerHtml现在不再接受字符串,因为它现在是IHtmlContent
但由于.ToString()不呈现标记,因此它不起作用:
li.InnerHtml = new HtmlString(span.ToString())
Run Code Online (Sandbox Code Playgroud)
它只是呈现为"Microsoft.AspNet.Mvc.Rendering.TagBuilder",类型的名称.
我没有在TagBuilder上看到任何新方法来提供所需的功能.我错过了什么?我现在如何使用TagBuilder构建复杂的嵌套html?
Mem*_*sen 16
在撰写本文时,使用MVC 6 Tagbuiler.InnerHtml确实没有setter了.它有一些方法来附加元素.比如你可以写:
var container = new TagBuilder("div");
var input = new TagBuilder("input");
container.InnerHtml.AppendHtml(input);
Run Code Online (Sandbox Code Playgroud)
Mih*_*scu 15
因为TagBuilder现在实现了IHtmlContent,你应该能够直接使用它而不用了.ToString().
var li = new TagBuilder("li");
li.AddCssClass("inactive");
var span = new TagBuilder("span");
span.SetInnerText(somestring);
li.InnerHtml = span;
Run Code Online (Sandbox Code Playgroud)
Beta 7中当前实现的真正问题在于没有简单的方法将两个子标记构建器内容附加到父标记生成器内容.您可以按照GitHub上的讨论进行操作.
目前的提议是InnerHtml不可转让,而是支持Append.这个目标是在Beta 8中实现.
Beta 7中的解决方法是parent.WriteTo使用a StringWriter将其转换为a string.
以 @Mihai 的答案为基础,展示 StringWriter 方法的实际代码:
// Create tag builder
var builder = new TagBuilder("img");
//...
// Render tag approach also changed in .NetCore
builder.TagRenderMode = TagRenderMode.SelfClosing;
//Create the StringWriter and make TagBuilder "WriteTo" it
var stringWriter = new System.IO.StringWriter();
builder.WriteTo(stringWriter, HtmlEncoder.Default);
var tagBuilderIsFinallyAStringNow = stringWriter.ToString();
Run Code Online (Sandbox Code Playgroud)
小智 5
失去span.SetInnerText(somestring);了现在可以做
span.InnerHtml.SetContent(somestring);
使用Microsoft.AspNetCore.Html.HtmlContentBuilderExtensions.
这是从带有 AspNetCore 2.0.1 的 4.7 的角度来看的。
| 归档时间: |
|
| 查看次数: |
16621 次 |
| 最近记录: |