【问题标题】:How to render decoded HTML in a (i.e. a <br>) in GridView cell如何在 GridView 单元格中的(即 <br>)中呈现解码的 HTML
【发布时间】:2010-09-30 17:13:12
【问题描述】:

我将 GridView 绑定到 LINQ 查询。 LINQ 语句创建的对象中的某些字段是字符串,需要包含换行符。

显然,GridView 对每个单元格中的所有内容进行了 HTML 编码,因此我无法插入
来在单元格中创建新行。

如何告诉 GridView 不要对单元格的内容进行 HTML 编码?

也许我应该改用其他控件?

【问题讨论】:

    标签: c# asp.net gridview newline


    【解决方案1】:

    HtmlEncode property 设置为false 怎么样?对我来说,这要简​​单得多。

    <asp:BoundField DataField="MyColumn" HtmlEncode="False" />
    

    【讨论】:

    • 同意。这要容易得多。
    • 在我的最后,它添加了一个带有空白标题的新列和原始列仍然存在。所以它没有用......
    • 发现一个东西,你还需要给GridView设置autogeneratecolumns="false"属性。但在这种情况下,您需要为 GridView 控件的 &lt;column&gt; 子标签内的每个数据库字段添加 &lt;asp:BoundField&gt;
    【解决方案2】:

    您可以订阅 RowDataBound 事件吗?如果可以,您可以运行:

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
      string decodedText = HttpUtility.HtmlDecode(e.Row.Cells[0].Text);
      e.Row.Cells[0].Text = decodedText;
    }
    

    【讨论】:

    • 与将BoundField 上的HtmlEncode 属性设置为false 相比,此方法的优点之一是您可以在文本周围添加HTML 标记,并且仍然使用数据的HTML 编码。例如,e.Row.Cells[0].Text = "&lt;span&gt;" + e.Row.Cells[0].Text + "&lt;/span&gt;";
    【解决方案3】:
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
    
        for (int i = 0; i < e.Row.Cells.Count; i++)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string decodedText = HttpUtility.HtmlDecode(e.Row.Cells[i].Text);
                e.Row.Cells[i].Text = decodedText;
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      输出中是否保留了正常的换行符?如果是这样,您可以发送换行符,并使用 css 样式 white-space: pre,这将保留换行符、空格和制表符。

      【讨论】:

      • 太好了,这帮助了我,避免了代码中的字符串替换。
      【解决方案5】:

      Booysen 的答案有效,但仅适用于一列。如果您在 RowDataBound 事件中运行一个循环,您可以用一个变量替换 [0] 并根据需要对每一列进行此项工作。这是我所做的:

      protected void gridCart_RowDataBound(object sender, GridViewRowEventArgs e)
      {
          for (int i = 1; i < 4; i++)
          {
              if (e.Row.RowType == DataControlRowType.DataRow)
              {
                  string decode = HttpUtility.HtmlDecode(e.Row.Cells[i].Text);
                  e.Row.Cells[i].Text = decode;
              }
          }
      }
      

      由于我的数据,我故意从 1 开始,但显然它可以满足您的任何需求。

      【讨论】:

        【解决方案6】:

        我首先使用

        将数据从多行文本框中插入到我的 sql-server 表中,从而解决了这个问题
           replace (txt = Replace(txt, vbCrLf,"<br />"))
        

        然后我使用 Ray Booysen 的解决方案将其返回到我的 gridview:

         Protected Sub grdHist_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdHist.RowDataBound
        
              Dim col1 As String = HttpUtility.HtmlDecode(e.Row.Cells(2).Text)
        
              e.Row.Cells(2).Text = col1
        
        End Sub
        

        【讨论】:

          【解决方案7】:
          protected void gvHead_OnRowDataBound(object sender, GridViewRowEventArgs e) {
            for (int i = 0; i < e.Row.Cells.Count; i++) 
              e.Row.Cells[i].Text = HttpUtility.HtmlDecode(e.Row.Cells[i].Text);
          }
          

          【讨论】:

            【解决方案8】:

            您必须绑定到 DataBoundGrid 事件并更改要渲染 HTML 代码的列的渲染。

            public event EventHandler DataBoundGrid {
              add { ctlOverviewGridView.DataBound += value; }
              remove { ctlOverviewGridView.DataBound -= value; }
            }
            
            ctlOverview.DataBoundGrid += (sender, args) => {
              ((sender as ASPxGridView).Columns["YourColumnName"] as GridViewDataTextColumn).PropertiesTextEdit.EncodeHtml = false;
            };
            

            【讨论】:

              【解决方案9】:

              @Ray Booysen 的答案是正确的,但在某些情况下 HtmlDecode() 无法处理您的问题。您可以使用 UrlDecode() 而不是 HtmlDecode()。
              这是另一个解决方案:

              if (e.Row.RowType == DataControlRowType.DataRow)
              {
                string decodedText = HttpUtility.UrlDecode(e.Row.Cells[0].Text);
                e.Row.Cells[0].Text = decodedText;
              }
              

              【讨论】:

                猜你喜欢
                • 2013-01-13
                • 2020-10-30
                • 2016-12-28
                • 1970-01-01
                • 2012-04-05
                • 1970-01-01
                • 1970-01-01
                • 2010-10-31
                • 1970-01-01
                相关资源
                最近更新 更多