生成HTML DOM元素并将其插入到Razor页面中

问题描述

我目前正在处理一个asp.net MVC Web应用程序,在该应用程序中,我必须生成或多或少复杂的HTML结构,然后将其插入Razor页面。目前,我生成带有字符串连接的HTML,然后将字符串添加到控制器中的ViewBag中,如下所示:

public class SomeController : Controller
{
    public IActionResult Index()
    {
        string htmlString = "<div id=\"example-div\">Some more Stuff</div>" + "Some more HTML strings";
        Viewbag.htmlString = htmlString;
            
        return View();
    }
}

然后我像这样在我的Razor页面内部访问该字符串并将其渲染为HTML:

@Html.Raw(ViewBag.htmlString)

但这不是最佳实践。有没有更好的方法可以在控制器内部实际生成HTML DOM元素,然后将该元素像模板一样加载到剃须刀页面中?如果可以,怎么办?

谢谢

解决方法

在这里您可以创建自己的自定义扩展帮助程序。

  • 创建静态类

  • 创建静态方法

  • 在web.config视图文件夹中注册名称空间以在以下位置进行全局访问 所有页面

  1. 创建一个班级
public static class HtmlHelpers   
{   
     public static MvcHtmlString RenderTemplate(this HtmlHelper helper,string moreHtml=default(string))   
     {   
        MvcHtmlString ohtml = null;
        StringBuilder builder=new StringBuilder();
        builder.Append("<div id=\"example-div\">");
        builder.Append("Some more Stuff");
        builder.Append(moreHtml);
        builder.Append("</div>");
        ohtml =new MvcHtmlString(builder.ToString());
        
        return ohtml;
     }  
 } 
  1. namespaces属性内的web.config中注册类名称空间
<add namespace="YOURNAMESPACE"/>
  1. 打开任何cshtml页面,然后尝试键入此关键字。
@Html.RenderTemplate() // Default template
@Html.RenderTemplate("<span>More stuff</span>") // Customized template