1

エキスパンド属性として追加するプロパティを持つサーバーコントロールを作成しています。最初のページの読み込みでは機能しますが、部分的なポストバックの後、機能を停止します。私のexpando属性はなくなりました。

このクラスは、telerikRadButtonから派生したクラスです。

これは、オーバーライドされた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を使用しています。これは、部分的なポストバックシナリオで機能するはずです(他のプロジェクトでも機能します)が、RegisterExpandoAttributeはここでは機能しないようです。また、コードもステップスルーし、radContextMenuが実際にFindControlによって検出されることを確認しました。

私が間違っていることについての洞察は大いに評価されるでしょう。ありがとうございました

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 に答える