Val*_*tor 2 c# razor asp.net-core
我正在开发一个 Html Helper 来创建一个由多个元素组成的控件,使用TagBuilders 构建。控件本身将使用TagBuilder包含 adiv和所有子元素的 a 进行渲染。
我实现了一种Render()方法来创建控件并将其返回为string:
public class MyCustomControl
{
public override string ToString()
{
return Render();
}
private string Render()
{
TagBuilder mainContainer = new TagBuilder("div");
// Generate child elements and append to mainContainer...
using (StringWriter writer = new StringWriter())
{
mainContainer.WriteTo(writer, HtmlEncoder.Default);
return writer.ToString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
并创建了一个扩展方法来在 Razor 视图中调用它:
public static MyCustomControl(this IHtmlHelper html)
{
return new MyCustomControl();
}
Run Code Online (Sandbox Code Playgroud)
并将其包含在视图中,如下所示:
@(Html.MyCustomControl()
)
Run Code Online (Sandbox Code Playgroud)
问题是我没有渲染 html,而是将原始 html 文本输出到视图,所以我实际上看到:
<div><!-- all child controls html here --></div>
Run Code Online (Sandbox Code Playgroud)
而不是那里有一个元素。
您需要返回一个实例IHtmlContent而不是string:
public static class HtmlHelperExtension {
public static IHtmlContent MyCustomControl(this IHtmlHelper html)
{
var result = new MyCustomControl();
return html.Raw(result.Render());
}
}
Run Code Online (Sandbox Code Playgroud)
测试用例 :
public class MyCustomControl
{
public override string ToString()
{
return Render();
}
public string Render()
{
TagBuilder mainContainer = new TagBuilder("div");
mainContainer.Attributes.Add(new KeyValuePair<string, string>("data-id","123") );
// Generate child elements and append to mainContainer...
using (StringWriter writer = new StringWriter())
{
mainContainer.WriteTo(writer, HtmlEncoder.Default);
var result=writer.ToString();
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
结果将是:
<div data-id="123"></div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3396 次 |
| 最近记录: |