使用带有HelperResult和MvcHtmlString的HtmlHelper的Mvc UserControl

卡洛斯·兰德拉斯(Carlos Landeras)

我正在用asp mvc开发应用程序,并且想为开发人员创建一些友好的控件,例如asp.net WebForms中的Server控件。在这种情况下,我想创建一个具有一些固定的html并在项目模板内进行渲染的引导面板。我这样做是这样的:

public static MvcHtmlString BootPanel<T>(this IEnumerable<T> items, Func<T, HelperResult> template, string title = "")
    {

     StringBuilder sb = new StringBuilder();
     sb.Append("<div class='panel panel-info'>");
     sb.Append("<div class='panel-heading'>");
     sb.Append(title);
     sb.Append("</div>");
     sb.Append("<div class='panel-body'>");
        
     var hr = new HelperResult(writer =>
              {
                 foreach (var item in items)
                {
                  template(item).WriteTo(writer);
                }
       });

      sb.Append(hr.ToHtmlString());
      sb.Append("</div>");
      sb.Append("</div>");
      return MvcHtmlString.Create(sb.ToString());
    }

这是剃刀视图:

@{
  var videoGames = new[] {
      new VideoGame {nombre = "Shadows of mordor", precio = 66},
      new VideoGame {nombre = "Spiderman", precio = 50}
      };
   }    

  @videoGames.BootPanel(@<div>
                            @item.nombre  &nbsp;  @item.precio
                        </div>
                      , "Titulo")

使用引导程序类可以正确呈现输出:

在此处输入图片说明

问题是。这是实现这种控制的正确方法吗?

编辑:

按照您的回答,我更新了助手,并使用了TagBuilder:

public static MvcHtmlString BootPanel<T>(this IEnumerable<T> items, Func<T, HelperResult> template, string title = "")
    {
        TagBuilder PanelDiv = new TagBuilder("div");
        PanelDiv.AddCssClass("panel panel-info");

        TagBuilder PanelHeading = new TagBuilder("div");
        PanelHeading.AddCssClass("panel-heading");
        PanelHeading.SetInnerText(title);

        TagBuilder PanelBody = new TagBuilder("div");
        PanelBody.AddCssClass("panel-body");
       
        var hr = new HelperResult(writer =>
        {


            foreach (var item in items)
            {
                template(item).WriteTo(writer);
            }

        });

        PanelBody.InnerHtml = hr.ToHtmlString();

        PanelDiv.InnerHtml = PanelHeading.ToString() +
                             PanelBody.ToString();

        return MvcHtmlString.Create(PanelDiv.ToString());
    }
文卡特

确保在返回之前对输出字符串进行编码,因为如果有人为标题编写了JavaScript,则将导致脚本注入。除了外观外,您可以使用TagBuilder类来构建html代码,而不是使用硬编码的标签。请参阅此示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用UserControl还是WebForm?

来自分类Dev

当UserControl具有DataContext时,UserControl的DependencyProperty为null

来自分类Dev

带有图像属性的 WPF UserControl

来自分类Dev

使用Infragistics的UltraGrid创建UserControl

来自分类Dev

WPF + Unity:使用服务的UserControl?

来自分类Dev

在jQuery的UserControl中使用RadioButtonList

来自分类Dev

具有DataContext和DependencyProperty的UserControl

来自分类Dev

UserControl和ContentControl有什么区别?

来自分类Dev

使用 MVVM 创建带有 UserControl 和 DepenencyProperties 的自定义控件

来自分类Dev

UserControl和Canvas-矢量动画

来自分类Dev

listView DataPager和自定义userControl

来自分类Dev

ViewModel和UserControl视图之间的通信

来自分类Dev

在MainWindows和UserControl之间共享DataContext

来自分类Dev

UserControl和Canvas-矢量动画

来自分类Dev

交叉UserControl属性设置和持久值

来自分类Dev

绑定导致Element和UserControl之间的错误

来自分类Dev

以编程方式启用和禁用UserControl模板

来自分类Dev

对UserControl和嵌套DataGrid的依赖项属性

来自分类Dev

在MainWindows和UserControl之间共享DataContext

来自分类Dev

具有类型类型属性的UserControl

来自分类Dev

没有在ListView中加载UserControl

来自分类Dev

具有依赖项的UserControl属性

来自分类Dev

具有DependencyProperty的UserControl的多个实例

来自分类Dev

具有类型类型的属性的UserControl

来自分类Dev

具有ClientID的UserControl的document.getElementById

来自分类Dev

从具有 LiveChart 的 UserControl 渲染图像

来自分类Dev

使用dll中的ViewModel进行UserControl

来自分类Dev

何时在UserControl上使用模板化控件?

来自分类Dev

在UserControl WPF的视口中使用VisualBrush

Related 相关文章

热门标签

归档