aah*_*orn 5 html asp.net checkbox twitter-bootstrap
在 ASP.NET 的早期版本中,Microsoft 用于呈现disabled = "disabled"控件的属性。但是,自 HTML 4.01 规范以来,disabled 属性对于每种类型的 Web 控件不再有效。它仍然对 有效input,但不再对 有效span。
因此,他们添加了一个样式类(在 CSS 中),该样式类在禁用时设置为控件。对于禁用控件中的任何控件也是如此。默认情况下,该样式类称为aspNetDisabled. DisabledCssClass我知道您可以通过在根类上设置静态属性来更改它的名称WebControl。
但是,复选框会出现更烦人的情况。当您禁用复选框时,ASP.NET 会span在您周围呈现一个带有定义的样式类的复选框,如下所示。
<span disabled="disabled">
<input id="ctl00_UsecaseContent_ctl01_ctl01_bCVbox" type="checkbox" name="ctl00$UsecaseContent$ctl01$ctl01$bCVbox" checked="checked">
</span>
Run Code Online (Sandbox Code Playgroud)
我们使用 Bootstrap 作为 UI 框架,并在其之上使用复选框特定框架 [ https://github.com/flatlogic/awesome-bootstrap-checkbox][1]。工作正常。但是,当我禁用复选框时,ASP.NET 的附加功能span会破坏 HTML 复选框控件层次结构。因此,awesome-bootstrap-checkbox 中的 Javascript 不再处理其行为。
所以我的问题是:如何阻止 ASP.NET 呈现这个可怕的额外“跨度”?
而不是设置Enabled="false"
(IE <asp:CheckBox ID="chkBox1" runat="server" Enabled="false"></asp:CheckBox>)
从后面的代码中设置它,如下所示:
chkBox1.InputAttributes.Add("disabled", "disabled");
Run Code Online (Sandbox Code Playgroud)
确保您使用的是InputAttributes而不是Attributes
您可以使用System.Web.UI.WebControls.Adapters.WebControlAdapter来修改渲染结果。
public class CheckBoxAdapter: System.Web.UI.WebControls.Adapters.WebControlAdapter
{
private CheckBox _control;
public new CheckBox Control
{
get
{
return _control;
}
}
protected override void OnInit(EventArgs e)
{
_control = (CheckBox)base.Control;
base.OnInit(e);
}
protected override void Render(HtmlTextWriter writer)
{
//here you can do what ever you want...
.....
writer.WriteBeginTag("input");
writer.WriteAttribute("type", "checkbox");
writer.WriteAttribute("name", Control.GroupName);
writer.WriteAttribute("id", Control.ClientID);
....
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我们的 ASP.NET 代码与您通常创建复选框的代码完全相同。因此,现在我们需要告诉 Web 应用程序“何时”应该使用我们的代码进行渲染,而不是使用默认渲染。为此,我们将使用“浏览器”文件。首先,将“App_Browsers”文件夹添加到 ASP.NET Web 应用程序中。现在您需要添加一个浏览器文件。将其命名为“All.browser”,但文件名并不重要,只要它以“.browser”扩展名结尾即可。文件的内容应如下所示:
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.CheckBox" adapterType="CheckBoxAdapter" />
</controlAdapters>
</browser>
</browsers>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5479 次 |
| 最近记录: |