0

我有一个 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,名称)的表。我将 htmltext 保存在名称中。

例如 :

身份证名称

1 Cofee span style="color: DarkOrange">A

2 span style="background-color: LightSalmon">酒店>

我的问题是:当我将此表用于下拉数据源时,我的值显示为 html 标记。

在此处输入图像描述

怎么去掉html标签??

4

1 回答 1

2

如果我理解正确,您尝试为下拉列表选项应用一些样式。在这种情况下,您需要为下拉列表项目集合中的每个项目添加您的样式。您可以使用一些分隔符将项目样式存储在名称中,例如“;” “color:red; YourItem Name”(注意但我不认为这是个好主意)

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);
        }
}
于 2012-11-27T11:02:32.027 回答