【问题标题】:asp.net update trigger from multiple controls in gridview来自gridview中多个控件的asp.net更新触发器
【发布时间】:2011-03-07 21:24:25
【问题描述】:

我有一个带有多个复选框的 gridview,有时是 40+。我希望复选框在单击时在后面的代码中调用 .net 函数。通常,如果复选框位于网格视图之外,这将很简单。但是因为它们在gridview中并且我不知道有多少,所以在运行之前我不知道它们的id。

我现在的观点是,当您单击复选框时,jQuery 脚本会返回该复选框的 id 和值。不幸的是,我不知道如何将值传递给函数——这又会更新另一个 gridview。

AFAIK 我唯一的选择是在页面加载之前获取控件(复选框)的 ID,然后以编程方式将其添加到更新面板的更新触发器部分。有没有其他方法可以说“如果单击任何复选框,请运行它”?

【问题讨论】:

    标签: jquery asp.net ajax updatepanel


    【解决方案1】:

    为复选框使用 CSS 选择器并调用 __doPostBack 以刷新面板,例如为每个复选框分配一个 CSS 类 checkboxes,然后添加脚本:

    $('#checkboxes').change(function() {
      __doPostBack('<%=UpdatePanel1.UniqueID%>');
    }
    

    如果您对导致刷新的复选框的 ID 感兴趣,可以将其传回代码:

    $('#checkboxes').change(function() {
      __doPostBack('<%=UpdatePanel1.UniqueID%>',$(this).attr('id'));
    }
    

    第二个参数将以Request.Form["__EVENTARGUMENT"] 提供。你可以在这里放任何你想要的东西,例如如果需要,您还可以包括复选框的状态。第一个是__EVENTTARGET,但您不需要直接使用它。当它与 UpdatePanel 的唯一 ID 匹配时,只会刷新该面板。

    【讨论】:

    • 杰米你又帮了忙!这很有趣,这比我想要的方法更 jQuery。我必须尝试看看它是如何工作的,但这会“模仿”AJAX 触发器并传递给我后面代码中的函数吗?
    • UpdatePanel“触发器”实际上是一个非常简单的构造——在内部只有一个导致每个 UpdatePanel 刷新的事物列表。注册触发器只需将其添加到该 UpdatePanel 的列表中。在使用 AJAX/ScriptManager 时,每个 ASP.NET 回发控件都会调用 __doPostBack(或 __doPostBackWithOptions)来执行其提交。所以......你所做的就是自己调用它。这与将回发控件注册为面板的触发器相同。但是,您不能以这种方式直接将控制权传递给服务器事件处理程序,因为没有服务器控制权(续...)
    • 改为使用 __EVENTARGUMENT 设置一个标志,您可以在OnLoad 中签入,例如,查看客户端发生了什么或您如何到达那里。没有什么能阻止您在此标志中传递复杂数据(例如 JSON 数据),您还可以检查 __EVENTTARGET 是否与 UpdatePanel.UniqueID 匹配,如果匹配则从那里做一些事情。
    【解决方案2】:

    您可以使用UpdatePanel.ChildrenAsTriggers

    <asp:UpdatePanel ID="UpdatePanel1" runat="server"  UpdateMode="Conditional" ChildrenAsTriggers="true"">
        <ContentTemplate>
            <asp:GridView ID="GridView1" runat="server">
             ...
             ...
            </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>
    

    【讨论】:

    • 谢谢,另一个好建议。我想我看了这个然后卡住了。选中复选框会导致回发吗?
    • @IMAbev 肯定会!确保它的 AutoPostBack 设置为 True
    【解决方案3】:

    在这种情况下,我通常有一个 HiddenField 和一个带有 style='display:none;' 的按钮,并将其设置为 UpdatePanel 的触发器。

    当您提到时,不同的控件将调用一个 jQuery 事物,该事物会根据哪个控件引发此事件(在您的情况下是复选框)更新 HiddenField 具有适当的值。
    然后,它将单击 CSS 隐藏按钮 ($('#&lt;%=myButton.ClientID %&gt;').click();)。这应该会触发 UpdatePanel 的更新,我也可以在按钮服务器端 Click 事件中执行任何我想要的逻辑。

    【讨论】:

    • 我必须进一步了解这一点,以便更好地理解它。由于我的复选框位于嵌套的 gridiview 中,我在查找控件 ID 时会遇到同样的问题吗?
    • 并非如此。您可以将一些 CSS 类添加到所有复选框,然后使用 jQuery 将 JS 处理程序应用到使用此类的所有复选框。在 JS 本身内部,您可以使用this 来表示引发它的复选框,并使用$(this) 来针对它调用 jQuery 方法,以便您可以从那里获取复选框元素的 ID。
    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 2015-01-28
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多