在usercontrol内部我有updatepanelanimationextender,当我将此控件添加到网页时,我想将updatepanel的Id作为参数传递给控件的属性。
Usercontrol:
public partial class Controls_UpdateProgress : System.Web.UI.UserControl
{
public string UpdatePanelID { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
UpdatePanelAnimationExtender1.TargetControlID = UpdatePanelID;
}
}
}
<cc1:updatepanelanimationextender id="UpdatePanelAnimationExtender1" runat="server" >
<Animations>
<OnUpdating>
<Parallel duration="0" >
<ScriptAction Script="onUpdating();" />
</Parallel>
</OnUpdating>
<OnUpdated>
<Parallel duration="0">
<ScriptAction Script="onUpdated();" />
</Parallel>
</OnUpdated>
</Animations>
</cc1:updatepanelanimationextender>
WebPage:UpdatePanel1是updatepanel的id。
<uc1:UpdateProgress ID="UpdateProgress1" runat="server" UpdatePanelID="UpdatePanel1" />
我收到错误:
的TargetControlID 'UpdatePanelAnimationExtender1'不是 有效。该值不能为null或 空。
答案 0 :(得分:0)
要避免该异常,首先应确保UpdatePanelID不为null ...
if (!IsPostBack) {
if (UpdatePanelID != Null) {
UpdatePanelAnimationExtender1.TargetControlID = UpdatePanelID;
}
}
如果您希望以编程方式从父页面设置UpdatePanelID的属性,则需要将UpdateProgress1强制转换为Controls_UpdateProgress实例。要做到这一点,做这样的事情......
((Controls_UpdateProgress)UpdateProgress1).UpdatePanelID = "ThisIsTheIdYouWishToSet";
答案 1 :(得分:0)
AJAX控件扩展器不会将TargetControlID
存储在ViewState
中(我使用Reflector检查了System.Web.Extensions
3.5,并且该属性仅获取/设置私有成员)。因此,您存储的值会在回发时丢失。
您必须将值存储在每个请求中:
protected void Page_Load(object sender, EventArgs e)
{
UpdatePanelAnimationExtender1.TargetControlID = UpdatePanelID;
}