Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# __doPostBack未作为控件的一部分包含_C#_Asp.net_Web Controls - Fatal编程技术网

C# __doPostBack未作为控件的一部分包含

C# __doPostBack未作为控件的一部分包含,c#,asp.net,web-controls,C#,Asp.net,Web Controls,我已经为这个问题挠头好几个小时了,这个问题似乎很有趣。我似乎错过了控件应附带的\u doPostBack事件,但它没有。有人建议加上: ClientScript.GetPostBackEventReference(this, string.Empty); 然而,尽管它确实创建了我正在寻找的函数定义,但无论我做什么,页面都会在回发事件中重新加载。正如一些人在报告中提到的: 这是因为控件ID不匹配/找不到 我显然做了一些错误的事情,考虑到1)在没有暴力强制的情况下,回发函数无法呈现2)即使在暴力

我已经为这个问题挠头好几个小时了,这个问题似乎很有趣。我似乎错过了控件应附带的
\u doPostBack
事件,但它没有。有人建议加上:

ClientScript.GetPostBackEventReference(this, string.Empty);
然而,尽管它确实创建了我正在寻找的函数定义,但无论我做什么,页面都会在回发事件中重新加载。正如一些人在报告中提到的:

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

我显然做了一些错误的事情,考虑到1)在没有暴力强制的情况下,回发函数无法呈现2)即使在暴力强制时,回发也无法找到适当的设置。以下是代码片段:

类定义

[ParseChildren(true)]
[PersistChildren(true)]
[ToolboxData("<{0}:Accordion runat=server></{0}:Accordion>")]
public class Accordion : DataBoundControl, IPostBackEventHandler
单击处理程序、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);
if(ItemClick!=null)
{
输出+=“$(function(){$('#“+ClientID+”)。查找('div')。在('click',function(){doPostBack(''+UniqueID+“,''));});”;
}
writer.Write(输出);
如果您需要更多代码,请告诉我。我不想只是抛出一长页的代码,然后告诉人们去解决它

编辑:


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

,这表明它返回一个字符串,其中包含
\u doPostBack
方法调用。这不是控件的注册方法。然后使用控件呈现此字符串。当您使用自定义控件时,
\u doPostBack
不是自动输出。

非常感谢!当我意识到事情的顺序时,我意识到了这一点。但是,我想知道为什么在所有代码都运行完之后,它会重新加载我的页面。是不是因为没有更新任何元素(如果实现不需要在前端执行任何操作,则可能是这样)好的,我有点不明白您的意思是“您的代码一直运行”。。。你能详细说明一下吗?是的,没问题。我的意思是用正确的参数触发RaisePostBackEvent,并从那里调用事件处理程序。执行完所有代码后,页面将重新加载。我有点被这件事难住了。我相信它运行的是完整的回发,而不是部分的回发。这是正确的行为;部分回发的唯一机制是:页面回调(也基于javascript)或使用UpdatePanel
        if (ItemClick != null)
        {
            outPut += "<script> $(function() { $('#" + ClientID + "').find('div').on('click', function() { __doPostBack('" + UniqueID + "', '') }); }); </script>";
        }
        writer.Write(outPut);