__doPostBack未包含在控件中

本文关键字:控件 包含 doPostBack | 更新日期: 2023-09-27 18:25:37

我已经为这个问题挠头好几个小时了,这个问题似乎很有趣。我似乎错过了本应随我的控制一起出现的__doPostBack事件,但事实并非如此。一些人建议添加:

ClientScript.GetPostBackEventReference(this, string.Empty);

然而,尽管它确实创建了我正在寻找的函数定义,但无论我做什么,页面都会在回发事件上重新加载。正如一些人在中提到的那样

__doPostBack未定义

这是因为控件ID不匹配/找不到。

考虑到以下情况,我显然做错了:1)回发函数在不进行暴力强制的情况下不会渲染2)即使在暴力强制时,回发也找不到合适的设置。以下是代码片段:

类别定义

[ParseChildren(true)]
[PersistChildren(true)]
[ToolboxData("<{0}:Accordion runat=server></{0}:Accordion>")]
public class Accordion : DataBoundControl, IPostBackEventHandler

事件

public event JQUI_Event ItemClick;

单击处理程序、RaisePostBackEvent和附加__doPostBack 的OnLoad

    public void RaisePostBackEvent(string eventArgument)
    {
        ItemClick(null, null);
    }
    protected override void OnLoad(EventArgs e)
    {
        Page.ClientScript.GetPostBackEventReference(this, string.Empty);
        base.OnLoad(e);
    }
    protected virtual void OnClick(EventArgs e)
    {
        if (ItemClick != null)
        {
            ItemClick(null, null);
        }
    }

最后生成回发的代码:

        if (ItemClick != null)
        {
            outPut += "<script> $(function() { $('#" + ClientID + "').find('div').on('click', function() { __doPostBack('" + UniqueID + "', '') }); }); </script>";
        }
        writer.Write(outPut);

如果您需要更多代码,请告诉我。我不想只是抛出一长页代码,然后告诉人们去弄清楚。

编辑:

好的,调用RaisePostBackEvent(字符串eventArgument)。然而,我遇到的问题是页面仍然决定重新加载。我已经进行了测试,以确保它在正确的控件中调用正确的函数(不仅仅是因为它是回发)。有没有办法将其限制为部分回发而不是完全回发?

__doPostBack未包含在控件中

请参阅GetPostBackEventReference文档,该文档显示它返回一个字符串,其中包含__doPostBack方法调用。这不是控件的注册方法。然后使用控件渲染此字符串。使用自定义控件时,__doPostBack不是自动输出。