【问题标题】:Execute Javascript function from GridView ItemTemplate button click ASP.NET Web Forms从 GridView ItemTemplate 按钮执行 Javascript 函数单击 ASP.NET Web 窗体
【发布时间】:2013-11-21 00:25:23
【问题描述】:

我有一个 DataGridView,它有两个动态生成的 ItemTemplate 按钮列。我为单击它们时触发的两个按钮提供了代码隐藏,但是当单击 btnInfo 按钮时我还需要一个 javascript 函数来运行

标记:

 <asp:GridView ID="gridResutls" runat="server" OnRowCommand="gridResutls_RowCommand" AutoGenerateColumns="False">
        <Columns>
            <asp:BoundField DataField="strName" HeaderText="Name"/>
            <asp:BoundField DataField="strBrand" HeaderText="Brand"/>
            <asp:BoundField DataField="strServing" HeaderText="Serving"/>
                    <asp:TemplateField ShowHeader="False">
                        <ItemTemplate>
                            <asp:Button ID="btnInfo" runat="server" CausesValidation="false" CommandName="MoreInfo"
                            Text="More Info" CommandArgument='<%# Eval("strID") %>'/>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField ShowHeader="False">
                        <ItemTemplate>
                            <asp:Button ID="btnAdd" runat="server" CausesValidation="false" CommandName="AddItem"
                            Text="Add To Log" CommandArgument='<%# Eval("strID") %>' />
                        </ItemTemplate>
                    </asp:TemplateField>
        </Columns>
    </asp:GridView>'

我有一个名为 populateLabel() 的 javascript 函数,我需要在单击 btnInfo 时触发它。

有什么想法吗? (我知道有人问过类似的问题,我查看了所有帖子并尝试了一些方法,但似乎没有任何效果)

编辑:这是 ItemTemplate 按钮的代码隐藏

protected void gridResutls_RowCommand(object sender, System.Web.UI.WebControls.GridViewCommandEventArgs e)
    {

        // Kick out if neither of the two dynamically created buttons have been clicked
        if (e.CommandName != "MoreInfo" && e.CommandName != "AddItem")
        {
            return;
        }

        // If the "More Info" buton has been clicked
        if (e.CommandName == "MoreInfo")
        {
             // Some code
        }

        // If the "Add To Log" button has been clicked
        if (e.CommandName == "AddItem")
        {
            // Some code
        }
    }

【问题讨论】:

    标签: c# javascript asp.net gridview


    【解决方案1】:

    你可以这样做。

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if(e.Row.RowType == DataControlRowType.DataRow)
            {    
                Button btnAdd = e.Row.FindControl("btnAdd") as Button;
                btnAdd.Attributes.Add("OnClick", "populateLabel();");
            }
        }
    

    标记:

    <script type="text/javascript">
        function populateLabel() {
            alert('hi');
        }
    
    </script>
    
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="DSModels" OnRowDataBound="GridView1_RowDataBound">
        <Columns>
            <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" />
            <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
            <asp:TemplateField ShowHeader="False">
                <ItemTemplate>
                    <asp:Button ID="btnInfo" runat="server" CausesValidation="false" CommandName="MoreInfo"
                        Text="More Info" CommandArgument='<%# Eval("ID") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField ShowHeader="False">
                <ItemTemplate>
                    <asp:Button ID="btnAdd" runat="server" CausesValidation="false" CommandName="AddItem"
                        Text="Add To Log" CommandArgument='<%# Eval("ID") %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    

    【讨论】:

    • 那不行
    • 它似乎正在工作。我已经构建并运行了一个示例应用程序。请查看更新后的答案
    • 你说得对,它确实有效。谢谢你。我在 javascript 函数中生成的标签会弹出一秒钟然后消失。是否需要包装在 document.ready 中?
    【解决方案2】:

    使用OnClientClick:

    <asp:Button ID="btnInfo" runat="server" OnClientClick="populateLabel()" CausesValidation="false" CommandName="MoreInfo"
      Text="More Info" CommandArgument='<%# Eval("strID") %>'/>
    

    Example here.

    【讨论】:

    • OnClientClck 由于某种原因无法正常工作。我已经试过了。
    • 你的javascript函数是做什么的?将其添加到您的问题中。
    • 使用来自 API 的 jquery 函数填充营养标签。我在函数的第一行放了一个断点,尝试了很多不同的东西,但没有被命中
    • 当我使用 OnClientClick 时,它确实可以识别智能感知中的 populateLabel
    • 看看你的源代码,页面为设置了 OnClientClick 的按钮生成的 html 是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2011-06-16
    • 2011-06-11
    相关资源
    最近更新 更多