リンクボタンのクリックイベントハンドラーが実行されていません

StackOverflow https://stackoverflow.com/questions/86563

質問

AJAX ドロップダウンエクステンダーを使用してカスタム ドロップダウン リストを作成しています。ドロップ パネル内にオプションのリンクボタンがあります。

<asp:Label ID="ddl_Remit" runat="server" Text="Select remit address."
    Style="display: block; width: 300px; padding:2px; padding-right: 50px; font-family: Tahoma; font-size: 11px;" />
<asp:Panel ID="DropPanel" runat="server" CssClass="ContextMenuPanel" Style="display :none; visibility: hidden;">
    <asp:LinkButton runat="server" ID="Option1z" Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" />
    <asp:LinkButton runat="server" ID="Option2z" Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" />
    <asp:LinkButton runat="server" ID="Option3z" Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" />-->
</asp:Panel>
<ajaxToolkit:DropDownExtender runat="server" ID="DDE"
    TargetControlID="ddl_Remit"
    DropDownControlID="DropPanel" />

そして、これはうまくいきます。ここで私がしなければならないことは、このドロップダウンリストに動的に入力することです。これが私の最善の試みです:

private void fillRemitDDL()
{
    //LinkButton Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem"

    DAL_ScanlineTableAdapters.SL_GetRemitByScanlineIDTableAdapter ta = new DAL_ScanlineTableAdapters.SL_GetRemitByScanlineIDTableAdapter();
    DataTable dt = (DataTable)ta.GetData(int.Parse(this.SLID));
    if (dt.Rows.Count > 0)
    {
        Panel ddl = this.FindControl("DropPanel") as Panel;
        ddl.Controls.Clear();
        for (int x = 0; x < dt.Rows.Count; x++)
        {
            LinkButton lb = new LinkButton();
            lb.Text = dt.Rows[x]["Remit3"].ToString().Trim() + "<br />" + dt.Rows[x]["Remit4"].ToString().Trim() + "<br />" + dt.Rows[x]["RemitZip"].ToString().Trim();
            lb.CssClass = "ContextMenuItem";
            lb.Attributes.Add("onclick", "setDDL(" + lb.Text + ")");
            ddl.Controls.Add(lb);
        }
    }
}

私の問題は、スクリプトを実行するイベントを取得できないことです。上記のコードと置き換えを試しました

lb.Attributes.Add("onclick", "setDDL(" + lb.Text + ")");  

lb.Click += new EventHandler(OnSelect);  

そしてまた

lb.OnClientClick = "setDDL(" + lb.Text + ")");

クライアント側でアラートを使用してブランチをテストしていますが、何も得られません。

編集:汎用アンカーを追加してみようと思いますが、要素を asp.net コントロールに追加できると思います。また、サーバーコードからクライアント側の div にアクセスして、そのように追加することもできません。イベントで何らかのコントロールを使用する必要があります。私の setDLL 関数は次のようになります。

function setDDL(var)
{
    alert(var);
    document.getElementById('ctl00_ContentPlaceHolder1_Scanline1_ddl_Remit').innerText = var;
}

また、関数呼び出しで文字列変数を取り出しただけです(つまり、から

lb.Attributes.Add("onclick", "setDDL(" + lb.Text + ")");   

lb.Attributes.Add("onclick", "setDDL()");
役に立ちましたか?

解決

スクリプト内で setDDL メソッドが何を行うのかはわかりませんが、リンク ボタンの 1 つがクリックされるとメソッドが起動されるはずです。ただし、サーバー側のコントロールへの参照がないため、.netリンクボタンの代わりに汎用のHTMLアンカーを挿入する方が良いかもしれません。その後、setDDL メソッドを使用してデータ交換を処理できます。さらに、引用符なしでリテラル文字列データを配置すると、スクリプトの問題 (メソッドが呼び出されない + ページ エラーなど) が発生するため、setDDL の呼び出し内に配置する文字列を引用符で囲むこともできます。

他のヒント

OK、リテラルを使用して、onclicks を含むアンカータグを作成しました。これはうまく機能しているようです。どうもありがとう。

追加はおそらく次のようになります (文字列の前後に '' を追加し、; を追加します)。JavaScript ステートメントの最後まで)。

lb.Attributes.Add("onclick", "setDDL('" + lb.Text + "');");

または!

をセットする OnClientClick プロパティ リンクボタンにあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top