0

Repeater 内にいくつかの LinkBut​​tons があります。それらを手動でクリックすると、ポストバックがうまくいきます。JavaScriptを介してLinkBut​​tonをクリックしようとする試みはすべて失敗し、現在アイデアが不足しています(Googleも同様で、他のオプションが見つからないようです)。OnClick と OnCommand を交互に使用しようとしました。

リンクボタン:

<asp:Repeater ID="repItems" runat="server" OnItemDataBound="repItems_OnItemDataBound">
    <ItemTemplate>
        <asp:Panel ID="pnlItem" runat="server">                       
            <asp:LinkButton ID="lnkItem" runat="server" OnClick="lnkItem_OnClick" OnCommand="lnkItem_OnCommand"></asp:LinkButton>                  
        </asp:Panel>
    </ItemTemplate>        
</asp:Repeater>  

Javascript:

eval(LinkButton.attr('href'); //Causes Sys.ParameterCountException
LinkButton.click();           //Nothing happens (no click event on LinkButton)
LinkButton.trigger('click');  //Same as LinkButton.click()

ポストバックを行うように OnClientClick を設定すると、click() 関数が機能し始めますが、Sys.ParameterCountException エラーが再び発生します。

lnkItem.OnClientClick = String.Format("__doPostBack('{0}', '');", lnkItem.UniqueID);

ScriptManager をリリース モードに変更することを提案する人もいますが、それはポストバックをトリガーせず、エラー メッセージを削除しただけです。

eval(LinkButton.attr('href');Google Chrome で動作します。

4

1 に答える 1

0

発生している問題はわかりませんが、次の問題が解決します。

ASCX:

<asp:Repeater ID="repItems" runat="server">
    <ItemTemplate>
        <asp:Panel ID="pnlItem" runat="server">                       
            <asp:LinkButton ID="lnkItem" runat="server" Text='<%# Eval("Text") %>' OnClick="lnkItem_OnClick" OnCommand="lnkItem_OnCommand"></asp:LinkButton>                  
        </asp:Panel>
    </ItemTemplate>        
</asp:Repeater>

<button onclick="document.getElementById('MainContent_repItems_lnkItem_0').click(); return false;">Huzzah!</button>

コードビハインド:

    protected void Page_Load(object sender, EventArgs e)
    {
        List<Item> test = new List<Item>();
        test.Add(new Item { Text = "Item 1" } );
        test.Add(new Item { Text = "Item 2" } );
        repItems.DataSource = test;
        repItems.DataBind();
    }

    protected void lnkItem_OnClick(object sender, EventArgs e)
    {
        this.Controls.Add(new Literal() { Text = ((LinkButton)sender).Text });
    }

    protected void lnkItem_OnCommand(object sender, EventArgs e)
    {
        this.Controls.Add(new Literal() { Text = ((LinkButton)sender).Text });
    }

この例では、OnClickとOnCommandの両方が起動します。

于 2012-07-10T17:58:27.443 に答える