【问题标题】:__doPostBack not being included as part of control__doPostBack 不包含在控制范围内
【发布时间】:2013-07-31 16:15:57
【问题描述】:

我已经在这个问题上摸索了几个小时,这个问题似乎很有趣。我似乎错过了我的控件应该附带的__doPostBack 事件,但事实并非如此。有人建议添加:

ClientScript.GetPostBackEventReference(this, string.Empty);

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

__doPostBack is not defined

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

考虑到 1) 回发功能在没有被强制进入的情况下不会呈现 2) 即使在强制进入时,回发也找不到合适的设置,这显然是我做错了。以下是代码的sn-ps:

类定义

[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(string eventArgument)。但是,我遇到的问题是页面仍然决定重新加载。我已经测试以确保它在正确的控件中调用正确的函数(不仅仅是因为它是回发)。有没有办法将此限制为部分回发而不是完整回发?

【问题讨论】:

    标签: c# asp.net web-controls


    【解决方案1】:

    See the GetPostBackEventReference documentation,表示它返回一个字符串,其中包含__doPostBack方法调用。它不是控件的注册方法。然后,您可以使用控件呈现此字符串。当您使用自定义控件时,__doPostBack 不是自动输出。

    【讨论】:

    • 非常感谢!当我意识到事件的顺序时,我意识到了这一点。但是,我想知道为什么当所有代码都运行时它会重新加载我的页面。是不是因为没有元素被更新(可能是如果实现不需要在前端做任何事情)
    • 好的,我对你的意思“你的代码一直运行”有点困惑......你能详细说明一下吗?
    • 是的,没问题。我的意思是 RaisePostBackEvent 是用正确的参数触发的,然后我从那里调用事件处理程序。执行完所有代码后,页面重新加载。我对此有点困惑。我相信它会运行完整的回发而不是部分回发。
    • __doPostBack 始终运行完整的回发。那是正确的行为;部分回发的唯一机制是:页面回调(也基于 javascript)或使用 UpdatePanel
    猜你喜欢
    • 2021-02-17
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多