从转发器控件更新Panel和触发器

时间:2011-04-18 23:17:46

标签: asp.net triggers updatepanel repeater

您好我发现以下代码类似于以下内容。将一个按钮埋在转发器控件中以触发一个完整的循环回到服务器似乎真的很棒。

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
        </asp:ScriptManager> 

        <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
            <ContentTemplate> 
                <%=DateTime.Now.ToString() %> 
            </ContentTemplate> 
            <Triggers> 
                <asp:PostBackTrigger ControlID="HiddenButton" /> 
            </Triggers> 
        </asp:UpdatePanel> 

        <!--Make a hidden button to treat as the postback trigger--> 
        <asp:Button ID="HiddenButton" runat="server" Style="display: none" Text="HiddenButton" /> 


        <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1"> 
            <ItemTemplate> 
                 <!--when cick the button1, it will fire the hiddenButton--> 
                <asp:Button ID="Button1" Text="Trigger" CommandArgument='<%# Eval("Id") %>' OnClientClick="$get('HiddenButton').click();return false;" 
                    runat="server" /> 
            </ItemTemplate> 
        </asp:Repeater>

它使用hiddenButton通过将原始按钮的click事件挂钩到此实现来实现此目的。但是我对此的补充是为按钮设置了CommandArgument。我还需要为HiddenButton设置它。

有没有人知道如何解决这个问题?

2 个答案:

答案 0 :(得分:12)

首先,我想使用您发布的相同示例解释使用Disadvantage的{​​{1}}。

以下是原始代码

enter image description here


输出

enter image description here


要显示22个字符的字符串,您可以检查接收和发送到服务器的数据量。想象一下

  1. 如果您考虑使用Update PanelDatabase发送每个请求,并且Update Panel位于GridView !!!!!!
  2. 假设您将Update Panel数据用于每个请求,并使用ViewState
  3. 根据我的理解,上述技术都是最糟糕的。


    现在我将描述你GridView Inside the Update Panel

    更新页面方法面板

    Page Methods允许Page Methods页面使用ASP.NET AJAX直接执行Page’s Static Methods。我们可以使用JSON (JavaScript Object Notation)仅请求我们感兴趣的信息,而不是回发然后receiving HTML markup来完全替换我们的UpdatePanel’s contents

    示例代码

    enter image description here enter image description here


    输出

    enter image description here

    希望这清楚地解释了使用的不同。


    回答原始查询

    您必须注册以下Web Method的{​​{1}}事件,并使用以下代码。

    代码背后

    ItemDataBound

    的JavaScript

    Repeater

    //替代

    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || 
                               e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Button btn = (Button)e.Item.FindControl("Button1");
            btn.OnClientClick = string.Format("SubmitButton('{0}');return false;"
                                                            , HiddenButton.ClientID);
    
        }
    }
    

    Reference &amp;的 Here

答案 1 :(得分:0)

您的HiddenButton控件是一个服务器控件,但您正尝试使用它的ASP.Net ID在JQuery中访问它,

<asp:Button ID="Button1" Text="Trigger" CommandArgument='<%# Eval("Id") %>' OnClientClick="$get('**HiddenButton**').click();return false;" 
                runat="server" /> 

解决问题的一种快速方法是创建一个单独的函数,

<script type="text/javascript">
function SubmitButton(btn)
{
     $get("#" . btn).click(); 
}
</script>

并将您的按钮代码更改为,

<asp:Button ID="Button1" Text="Trigger" CommandArgument='<%# Eval("Id") %>' 
                runat="server" /> 

在代码后面,在转发器的ItemDataBound事件中,找到按钮和HiddenControl并设置Button1的OnClientClick属性,

Button1.OnClientClick= string.Format("SubmitButton('{0}');return false;",HiddenButton.ClientID);