1

我正在创建一个服务器控件,该控件具有我要添加为 expando 属性的属性。它适用于初始页面加载,但在部分回发后,它停止工作。我的 expando 属性消失了。

该类是从 Telerik RadButton 派生的类。

这就是我在重写的 PreRender 方法中所做的事情:

Dim radContextMenu As RadContextMenu = Parent.FindControl(ContextMenuID)
If radContextMenu IsNot Nothing Then
  'register the name of our context menu so we can access it from javascript
  ScriptManager.RegisterExpandoAttribute(Me, Me.ClientID, "ContextMenuClientID", radContextMenu.ClientID, False)
End If

如您所见,我正在使用 ScriptManager,它应该在部分回发 senarios 中工作(它也适用于我的其他项目),但 RegisterExpandoAttribute 似乎在这里不起作用。此外,我还单步执行了代码,并确定 FindControl 确实找到了 radContextMenu。

任何关于我做错了什么的见解都会受到极大的赞赏。谢谢

4

1 回答 1

1

通过添加检查页面ScriptManager.IsInAsyncPostBack属性解决了类似问题。当它设置为false你应该使用<control>.Page.ClientScript.RegisterExpandoAttribute方法。

我最终得到了Control包含此逻辑的新扩展方法:

public static void RegisterExpandoAttribute(this Control control, HtmlTextWriter writer, string attributeName, string attributeValue, bool encode = false)
{
    var scriptManager = ScriptManager.GetCurrent(control.Page);
    if (scriptManager != null && scriptManager.IsInAsyncPostBack)
        ScriptManager.RegisterExpandoAttribute(control, control.ClientID, attributeName, attributeValue, encode);
    else
        control.Page.ClientScript.RegisterExpandoAttribute(control.ClientID, attributeName, attributeValue, encode);
}
于 2013-02-05T09:34:08.867 回答