如何在呈现时从WebControl中删除span标记

Mar*_*man 17 html c# asp.net web-controls

当使用ASP.NET CheckBox(并且在外部情况下,继承自a CheckBox)时,它会在复选框输入控件周围呈现一个范围,此跨度控件正在影响jQuery脚本.

渲染时是否可以删除此跨度?

小智 35

找到这个有用的提示:

在Code Behind中,使用InputAttributes而不是Attributes.

例如,键入以下内容:

chk.InputAttributes.Add("onchange", "updateFields()")
Run Code Online (Sandbox Code Playgroud)

而不是这个:

chk.Attributes.Add("onchange", "updateFields()")
Run Code Online (Sandbox Code Playgroud)

或者代替内联声明:

<asp:CheckBox ID="chk" runat="server" onchange="updateFields()" />
Run Code Online (Sandbox Code Playgroud)

最后两个将导致包装跨度.

  • 这应该标记为答案. (4认同)

Bry*_*yan 10

我只是在测试页面上尝试了这个,而且我没有得到我的CheckBox控件......你确定它是CheckBox吗?有条件吗?

更新:好的,它似乎取决于CheckBox是否有额外的属性,包括CssClass设置......或"禁用"属性.


mat*_*son 8

我不知道这是否适用于这个特定的例子.但是如果您创建自己的WebControl并且您从不希望它自己渲染跨度,您可以覆盖控件渲染方法,如下所示:

public class MyWebControl : WebControl
{

  /* Your code 
             between here */

  protected override void Render(HtmlTextWriter writer)
  {
    RenderContents (writer);
  }
}
Run Code Online (Sandbox Code Playgroud)

我想你可以将它添加到继承的CheckBox ......就像这样:

public class MyCheckBox : CheckBox 
{

  /* Your code 
             between here */

  protected override void Render(HtmlTextWriter writer)
  {
    RenderContents (writer);
  }
}
Run Code Online (Sandbox Code Playgroud)

解决方案的基本问题在这里有更好的解释:http:
//www.marten-online.com/net/stripping-span-tag-from-webcontrol.html