【问题标题】:Update Panel and triggers from a repeater control从中继器控件更新面板和触发器
【发布时间】:2011-04-18 23:17:45
【问题描述】:

您好,我在网上找到了与以下类似的代码。将按钮隐藏在中继器控件中以触发返回服务器的完整周期似乎真的很棒。

<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 通过将原始按钮的单击事件挂钩到该按钮来实现此目的。但是,我对此的补充是按钮的 CommandArgument 设置。我还需要为 HiddenButton 设置它。

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

【问题讨论】:

  • 我将把它作为评论而不是答案发布,因为我不确定它是否会起作用,但你可以尝试this suggestion 创建你自己的属性并设置它。跨度>
  • 我认为你甚至不需要 javaScript。移除 HiddenButton 和 当你点击 “Button” 时,更新面板会被刷新。所以你的意思是你需要一个 AsyncPostBackTrigger 吗?

标签: asp.net triggers updatepanel repeater


【解决方案1】:

首先我想解释一下Disadvantage 使用Update Panel 使用您发布的相同示例。

以下是原始代码


输出


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

  1. 如果您考虑使用Update Panel 将每个请求发送到Database 并且您的GridViewUpdate Panel 中!!!!!!
  2. 假设您对每个请求使用ViewState 数据并使用GridView Inside the Update Panel

根据我的理解,上述两种技术都是最差的。


现在我将描述你Page Methods

更新面板上的页面方法

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

示例代码


输出

希望这清楚地解释了用法的差异。


回答原始查询

您必须注册以下RepeaterItemDataBound 事件并使用以下代码。

代码隐藏

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);

    }
}

JavaScript

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

//另类

<script type="text/javascript">
     function SubmitButton(btn)
     {
         document.getElementById(btn).click(); 
     }
</script>

Reference & Here

【讨论】:

    【解决方案2】:

    您的 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" /> 
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2013-05-26
      • 1970-01-01
      • 2011-09-19
      相关资源
      最近更新 更多