Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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# 中继器回发中的动态按钮_C#_Asp.net_Viewstate_Repeater_Web Controls - Fatal编程技术网

C# 中继器回发中的动态按钮

C# 中继器回发中的动态按钮,c#,asp.net,viewstate,repeater,web-controls,C#,Asp.net,Viewstate,Repeater,Web Controls,我在另一个转发器的ItemTemplate中有一个嵌套的转发器控件。我想根据嵌套中继器中的某些项的数据值,动态地向它们添加一个删除和更新按钮,在本例中,这些项是否与当前用户关联。单击任一按钮都应基于服务器端进行处理,以便更新数据源,重新绑定嵌套的中继器,并更新包含两个中继器的更新面板 <asp:Repeater ID="rpProCom" runat="server"> <HeaderTemplate><div class="comment"><

我在另一个转发器的ItemTemplate中有一个嵌套的转发器控件。我想根据嵌套中继器中的某些项的数据值,动态地向它们添加一个删除和更新按钮,在本例中,这些项是否与当前用户关联。单击任一按钮都应基于服务器端进行处理,以便更新数据源,重新绑定嵌套的中继器,并更新包含两个中继器的更新面板

<asp:Repeater ID="rpProCom" runat="server">
    <HeaderTemplate><div class="comment"></HeaderTemplate>
    <ItemTemplate>
        <div class="c-score"><%# Eval("Text") %></div>
        <asp:UpdatePanel ID="upOut" runat="server" ChildrenAsTriggers="true" UpdateMode="Always" >
        <ContentTemplate>
        <asp:Repeater ID="rpVotes" runat="server" DataSource='<%# ((ScoreBoard.Score)Container.DataItem).Votes %>' OnItemDataBound="rpVotes_ItemDataBound">
            <HeaderTemplate><ul></HeaderTemplate>
            <ItemTemplate>
            <li>
            <div class="c-ctrl"><asp:PlaceHolder ID="phD" runat="server" /></div>
            <div class="c-box"><!-- placeholder for more tools --></div>
            <div class="c-i"><div runat="server" ID="imgCom" class='<%# Eval("ImgClass") %>' /></div>
            <div class="c-head">
                <strong><%# Eval("UserName") %></strong>
                <br /><%# Eval("Dt")%>
            </div>
            <div class="c-body"><%# Eval("Comment") %></div>
            </li></ItemTemplate><FooterTemplate></ul></FooterTemplate>
        </asp:Repeater>
        </ContentTemplate></asp:UpdatePanel>
    </ItemTemplate> 
    <FooterTemplate></div></FooterTemplate>
</asp:Repeater>
由于按钮是在item databound上创建的,并且嵌套在另一个控件中,因此我无法想出一种合理的方法将按钮和数据项的唯一标识符保持在Viewstate中,以便在PageInit postback上重新创建按钮,以触发按钮的Click事件

我尝试使用命令参数,但它们是空的:

javascript:__doPostBack('ctl00$CPHRight$rpProCom$ctl02$rpVotes$ctl01$d21','')
我需要一个包含中继器的引用和中继器中项目的唯一标识符,以便我可以更新DB并重新绑定该中继器(理想情况下是在仅包含该中继器的UpdatePanel中)。我知道这是一个典型的问题,我相信有人已经解决了


所以,基本上,是否有某种方法可以强制命令参数进入在ItemDataBound期间动态创建的控件中,或者识别哪个动态创建的按钮导致回发?我可以在中继器中放置和更新面板吗?我也可以在这篇文章中动态地使用这个词吗?

你可以想动态地使用多少就动态地使用多少:-)

我建议声明一个静态按钮,添加一个itemdatabound事件,并通过设置按钮的Visible属性来显示/隐藏按钮;这样,您就不必担心重新加载问题,但用户将无法看到他们没有权限的按钮


HTH.

我也这么想,但中继器中可能有数百个项目,只有大约5-10%的项目需要按钮。如果可能的话,添加到所有视图中会导致ViewState膨胀,我希望避免这种情况。不过,这是一个很好的建议。相反,如果你有很多这样的项目,添加一个动态按钮可能会是一场噩梦。在权衡了选项之后,我继续前进,接受了这个打击。太糟糕了,没有办法(我能想到)禁用ViewState,然后在数据绑定中有选择地启用它。我想这只是页面生命周期的本质。谢谢你的留言板。你可以在每次加载页面时禁用viewstate和bind。。。这始终是一个选项,但这可能会对数据库造成很大影响。
javascript:__doPostBack('ctl00$CPHRight$rpProCom$ctl02$rpVotes$ctl01$d21','')