我自己创建的用户控件有问题。如果我点击复选框,Checked
属性始终为false
,为什么?
<%@ Control Language="C#" AutoEventWireup="true" EnableViewState="true" CodeBehind="MyCtrl.ascx.cs" Inherits="MyCtrl" %>
<asp:CheckBox ID="attrCb" runat="server"
AutoPostBack="true"
oncheckedchanged="cb_CheckedChanged" />
cs文件
public bool IsChecked { get { return ViewState["IsChecked"] != null ? (bool)ViewState["IsChecked"] : false; } set { ViewState["IsChecked"] = value; } }
protected void cb_CheckedChanged(object sender, EventArgs e)
{
IsChecked = attrCb.Checked;
}
aspx代码段
<asp:Repeater ID="QuestionnaireRepeater" runat="server">
<ItemTemplate>
<tr>
<td><mytag:MyCtrl OnCheckedChange="On_CheckedChanged" ID="attrCb1" runat="server" /></td>
<td><mytag:MyCtrl OnCheckedChange="On_CheckedChanged" ID="attrCb2" runat="server" /></td>
<td><mytag:MyCtrl OnCheckedChange="On_CheckedChanged" ID="attrCb3" runat="server" /></td>
<td><mytag:MyCtrl OnCheckedChange="On_CheckedChanged" ID="attrCb4" runat="server" /></td>
<td><mytag:MyCtrl OnCheckedChange="On_CheckedChanged" ID="attrCb5" runat="server" /></td>
<td><mytag:MyCtrl OnCheckedChange="On_CheckedChanged" ID="attrCb6" runat="server" /></td>
</tr>
</ItemTemplate>
</asp:Repeater>
我做了一些更改,它也不起作用(根据Exposing Events from asp.net usercontrols to container web forms page)
我仍然看到false
在MyCtrl.ascx里面
<asp:CheckBox ID="attrCb" runat="server"
AutoPostBack="true"
oncheckedchanged="Cb_CheckedChanged1" />
在MyCtrl.cs里面我添加了
public event EventHandler CheckedChange;
private void OnCheckedChange(object sender, EventArgs ea)
{
var e = CheckedChange;
if (e != null)
e(this, ea);
}
protected void Cb_CheckedChanged1(object sender, EventArgs e)
{
OnCheckedChange(sender, e);
}
在我的aspx页面中:
protected void On_CheckedChanged(object sender, EventArgs e)
{
MyCrtl cbCtrl = ((MyCrtl)sender);
cbCtrl.IsChecked = cbCtrl.attrCb.Checked; //attrCb is exposed
//Checked is still false
}