国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

DataGrid表格上字符串的HTML編碼詳解

2019-11-18 12:01:48
字體:
來源:轉載
供稿:網友

  原因:
  在DataGrid的Cell上顯示 Html 編碼后的字符串,怎么做呢?假如還有惡意的代碼!我想網頁就會出亂子啦!
  
  事例:
  例如:我有一個DataGrid,用來顯數據庫中的自定義表的數據,表中含有用戶名信息,假如某人在輸入了這樣的信息
  "<script>alert('Hello');</script>" 作為用戶名,當瀏覽含有這個DataGrid的頁面時就會彈出一個消息框。我們希望的是
  在DataGrid的表格上顯示我們輸入的信息"<script>alert('Hello');</script>",而不是希望有什么惡意的東西發生。
  
  方法:
  我的解決辦法就是用<ASP:TemplateColum>替換所有的<asp:BoundColumn>,下面是具體的辦法。
  
  替換前:
  <asp:BoundColumn DataField="Name" HeaderText="Name"></asp:BoundColumn>
  
  替換后:
  <asp:TemplateColumn HeaderText="Name">
  <ItemTemplate>
    <%# GetCellEntry( DataBinder.Eval(Container, "DataItem.Name" ) ) %>
  </ItemTemplate>
  </asp:TemplateColumn>
   GetCellEntry是進行將字符串轉換為 HTML 編碼的字符串
  
  PRotected string GetCellEntry( object o )
  {
  string text = o.ToString();
  if ( text != null && text.Trim() != string.Empty )
  return Server.HtmlEncode( text );
  else
  return " ";
  }
  這樣的方法讓人感到很麻煩,因為我不得不為每一個DataGrid重復一遍這樣的工作,于是有了下面的解決方法:
  
  很好的解決方法就是利用OnItemDataBound事件來解決這個問題,可以在datagrid上設置OnItemDataBound
  
  <asp:datagrid id="MyDataGrid" runat="server" OnItemDataBound="Item_DataBound"></asp:datagrid>
   代碼可以這樣寫:
  
  private void DataGrid1_ItemDataBound( object sender,
  System.Web.UI.WebControls.DataGridItemEventArgs e )
  {
  for ( int i = 0; i < DataGrid1.Columns.Count; i++ )
  {
  if ( DataGrid1.Columns[i].GetType() == typeof(
  BoundColumn ) &&
  ( e.Item.ItemType == ListItemType.Item
  e.Item.ItemType == ListItemType.AlternatingItem ) )
  {
  BoundColumn boundColumn = (BoundColumn)
  DataGrid1.Columns[i];
  string text = DataBinder.Eval( e.Item.DataItem,
  boundColumn.DataField, boundColumn.DataFormatString );
  e.Item.Cells[i].Text = Server.HtmlEncode( text );
  }
  }
  }
  
  結論:
  datagrid數據表格中的數據將會綁定兩次數據源,第一次是在控件自身綁定數據的時候,第二次在觸發ItemDataBound事件的時候,也許這樣做沒有好的效率.但這也是一種不錯的將字符串轉換為 HTML 編碼的字符串的方法。
  
  希望在asp.net的未來版本中含有"HTML-Encode"的選項,用來處理將字符串轉換為 HTML 編碼的字符串在數據綁定時.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潢川县| 和田县| 鹤山市| 阿合奇县| 西青区| 珲春市| 庆城县| 泽库县| 公安县| 宾阳县| 临清市| 丰都县| 枣强县| 正定县| 韶关市| 松滋市| 北海市| 台州市| 丹东市| 旌德县| 格尔木市| 贵阳市| 石渠县| 英吉沙县| 于田县| 沈丘县| 和林格尔县| 年辖:市辖区| 湖南省| 松潘县| 望奎县| 齐齐哈尔市| 苍梧县| 岳阳县| 桐城市| 阿拉尔市| 阆中市| 广昌县| 皮山县| 青田县| 建水县|