asp:Button没有调用服务器端函数

4
我正在通过模板字段在数据绑定的asp:GridView中实例化asp:Button。其中一些按钮应该调用服务器端函数,但由于某种奇怪的原因,它没有起作用。当你点击这些按钮时,所有的按钮都只是向当前页面触发一个postback,什么也不做,实际上只是重新加载页面。
以下是代码片段:
<asp:GridView ID="gv" runat="server" AutoGenerateColumns="false" CssClass="l2 submissions" ShowHeader="false">
    <Columns>      

        <asp:TemplateField>            
            <ItemTemplate><asp:Panel ID="swatchpanel" CssClass='<%# Bind("status") %>' runat="server"></asp:Panel></ItemTemplate>                
            <ItemStyle Width="50px" CssClass="sw" />
        </asp:TemplateField>

        <asp:BoundField DataField="description" ReadOnly="true">                                
        </asp:BoundField>

        <asp:BoundField DataField="owner" ReadOnly="true">
            <ItemStyle Font-Italic="true" />
        </asp:BoundField>

        <asp:BoundField DataField="last-modified" ReadOnly="true">
            <ItemStyle Width="100px" />
        </asp:BoundField>

        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="viewBtn" cssclass='<%# Bind("sid") %>' runat="server" Text="View" OnClick="viewBtnClick" />
            </ItemTemplate>
        </asp:TemplateField>                                         

    </Columns>
</asp:GridView>

上面的viewBtn应该在服务器端调用viewBtnClick()函数。我已经定义了这个函数,并且有一个正确的签名(object,EventArgs)。需要注意的一件事是,这段代码实际上在一个ASCX中,它被加载到另一个ASCX中,最终加载到一个ASPX中。
任何帮助或对此问题的见解都将非常感激。谢谢!
(哦,请不要介意我的垃圾HTML / CSS语义 - 这仍然处于非常早期的阶段:p)
2个回答

3

如果您的GridView在Page_Prerender期间进行数据绑定,则处理postback事件时,相关的asp:button不存在。

尝试在Page_Load期间绑定gridview,或者使用GridView的OnItemCommand事件而不是按钮的OnClick事件。


这是很好的见解,但我的GridView在Page_Load期间已经被数据绑定了。不过我想我也会研究一下OnItemCommand。谢谢!然而,我尝试将一个常规的asp:Button放在GridView之外,但它也没有触发其服务器端钩子。奇怪。 - Richard Neil Ilagan

3

AutoWireupEvents是否设置为true?


是的,绝对没错。 :p - Richard Neil Ilagan
1
这个包含子ascx的控件是否在某个时刻被动态地添加到控件树中? - Tejs
你可能正在做一些有意思的事情。没错,你说得对。ASCX基于GET参数动态加载到父级ASCX中。 - Richard Neil Ilagan
由于某种原因,当控件在ASCX的OnInit()期间实例化时,控件的事件处理程序能够正常工作,而不是在Page_Load()期间。我将此标记为答案,因为这使我走上了正确的道路。谢谢! - Richard Neil Ilagan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接