如何在DropDownList中使用htmltext for DataTextField?

时间:2012-11-27 10:18:05

标签: asp.net

我有一个DropDownList并为它设置了一个DataSource。

HTML:

 <asp:DropDownList ID="ddlcategory" runat="server" DataSourceID="ODScategory"  DataTextField="Name" DataValueField="ID" Width="200px">
  </asp:DropDownList>

  <asp:ObjectDataSource ID="ODScategory" runat="server" SelectMethod="GetAllByCommand"TypeName="Alian.BusinessLayer.clsCustomerCategoryFactory">
  <SelectParameters>
    <asp:Parameter DefaultValue="FatherID is not null" Name="SQLWhere" Type="String" />
      </SelectParameters>
   </asp:ObjectDataSource>

我的数据源是一个包含两列(ID,Name)的表。我在名称中保存了htmltext。

例如:

ID名称

1 Cofee span style =&#34; color:DarkOrange&#34;&gt; A

2 span style =&#34; background-color:LightSalmon&#34;&gt; Hotel&gt;

我的问题是:当我将此表用于dropdowndatasource时,我的值显示为html标记。

enter image description here

如何删除html标签??

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您会尝试为您的下拉列表选项应用某种样式。 在这种情况下,您需要为下拉列表项集合中的每个项添加样式。 您可以使用某些分隔符存储名称的项目样式,例如';' “颜色:红色;你的名字”(N.B.但我不认为这是个好主意)

foreach(ListItem item in ddl.Items)
{
   string[] data=item.Text.Split(';');
   item.Attributes.Add("style", data[0]);
   item.Text=data[1];
}

你可以在Page_PreRender上做到这一点。 但是你必须要小心,因为并非所有浏览器都正确支持标签选项的样式属性。

从服务器端删除不需要的html标记:

 System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"(<.+>)\b|(<\/.+>)");

foreach(ListItem item in ddl.Items)
{
   item.Text=reg.Replace(item.Text," ");
}

您可以在数据源中进行此替换,但我不知道您使用的是哪种类型

如果您想使用javascript从客户端删除不需要的html标签:

使用Jquery使用

解决方案
function RemoveUnwantedHTMLTag()
{
   $('select:[id*="elementSelectId"] > option').each(function(){var _self=$(this);   _self.text(_self.text().replace(/<[^>]+>/g,' '));});
}

没有Jquery

function RemoveUnwantedHTMLTag()
{
  var _arr=document.getElementById('elementSelectId').childNodes;
    for (var i=0;i<_arr.length;i++)
    { 
         if(_arr[i].text!=undefined)
           { _arr[i].text=(_arr[i].text).replace(/<[^>]+>/g,' ');
                     _arr[i].value=(_arr[i].value).replace(/<[^>]+>/g,' ');
                    }

     }

}

在页面加载时启动你的javascript函数:

Jquery的

 $(documet).ready{RemoveUnwantedHTMLTag();}

没有jquery

 document.body.onload=function(){RemoveUnwantedHTMLTag();}

如果页面上存在Sys对象(如果您的下拉列表位于某个更新面板内,则此方法很有用)

  Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(RemoveUnwantedHTMLTag);

cs文件中的所有代码:

protected void Page_PreRender(object sender, EventArgs e){
if (!this.Page.ClientScript.IsStartupScriptRegistered("RemoveUnwantedHTMLTag")
        {
            string script = @"function RemoveUnwantedHTMLTag()
{
 var _arr=document.getElementById('"+ddlcategory.ClientID+"').childNodes;
 for (var i=0;i<_arr.length;i++)
{ if(_arr[i].text!=undefined)
    { _arr[i].text=(_arr[i].text).replace(/<[^>]+>/g,' ');
              _arr[i].value=(_arr[i].value).replace(/<[^>]+>/g,' ');// if text is same  with value
            }
}
}
 Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(RemoveUnwantedHTMLTag); ";
            ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(),  "RemoveUnwantedHTMLTag", script, true);
        }
}