有些時(shí)候asp.net 控件默認(rèn)狀態(tài)下生成的html代碼,不能滿足一些特定的需要。比如
我們想讓用戶做一些選擇,可以很容易的用如下代碼實(shí)現(xiàn)
<asp:checkboxlist runat="server">
<asp:listitem text="one" />
<asp:listitem text="two" />
<asp:listitem text="three" />
</asp:checkboxlist>
默認(rèn)狀態(tài)下checkboxlist會(huì)將這些選項(xiàng)放在一個(gè)table標(biāo)簽里,但是也許有個(gè)別情況不適合使用table,而需要一個(gè)un-ordered list(ul)。當(dāng)然我們可以重新寫一個(gè)繼承于checkboxlist的控件,但是使用control adpater會(huì)更容易,并且還有一些額外的好處。
首先看一下實(shí)現(xiàn):
1, 寫一個(gè)繼承自webcontroladapter的類,如下
using system;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.adapters;
public class radiobuttonlistadapter : webcontroladapter
{
protected override void render(htmltextwriter writer)
{
listcontrol targetcontrol = this.control as listcontrol;
// if the control that this adapter is pointing to is not
// a listcontrol (radiobuttonlist or checkboxlist) then
// we don't want to change the rendering.
if (targetcontrol == null || targetcontrol is irepeatinfouser == false)
{
base.render(writer);
return;
}
writer.writebegintag("ul");
if (targetcontrol.cssclass.length > 0)
{
writer.writeattribute("class", targetcontrol.cssclass);
}
writer.write(">");
irepeatinfouser repeaterinfo = (irepeatinfouser)this.control;
for (int i = 0; i < targetcontrol.items.count; i++)
{
writer.writefullbegintag("li");
repeaterinfo.renderitem(listitemtype.item, i, new repeatinfo(), writer);
writer.writeendtag("li");
}
writer.writeendtag("ul");
}
}
2,新建一個(gè)asp.net 文件夾 app_browsers,在其中添加一個(gè).browser文件,添加如下內(nèi)容
<browsers>
<browser refid="default">
<controladapters>
<adapter controltype="system.web.ui.webcontrols.checkboxlist"
adaptertype="radiobuttonlistadapter" />
<adapter controltype="system.web.ui.webcontrols.radiobuttonlist"
adaptertype="radiobuttonlistadapter" />
</controladapters>
</browser>
</browsers>
好了,一切ok。注意到了沒有?我們并沒有改變先前的asp.net代碼.這就是個(gè)非常重要的好處啊。
新聞熱點(diǎn)
疑難解答
圖片精選