ASP SqlDataSource UPDATE - 部分页面回发的AJAX?

时间:2018-01-09 15:35:16

标签: javascript jquery asp.net ajax updatepanel

我正在使用处理div点击事件 - 在div点击后,按ID拨打按钮。

$('#myDiv').on('click', (function(clickEvent) {
  document.getElementById("Button1").click();
}))

以下是ASP按钮标记:

<asp:Button ID="Button1" runat="server" OnClick="my_ClickEvent" Text="Button" CssClass="hide" />

这是背后的代码:

protected void my_ClickEvent(object sender, EventArgs e)
{
  SqlDataSource1.UpdateParameters["OwnerName"].DefaultValue = "Some Name";
  SqlDataSource1.Update();
  Response.Redirect(Request.Url.AbsoluteUri);
}

以下是div标记:

<form id="form1" runat="server">
  <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
  <asp:Timer ID="Timer1" runat="server" Interval="200000" OnTick="Timer1_Tick" Enabled="True" />
  <div class="square" id="myDiv" runat="server">
    <div class="content">
      <div>
        <p id="ImUnavailable">Unavailable for Dispatch</p>
        <div class="table">
          <div class="table-cell">
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
              <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
              </Triggers>
              <ContentTemplate>
                <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataSourceID="SqlDataSource1" CssClass="Grid" RowStyle-HorizontalAlign="Center" DataKeyNames="PhysicalAddress">
                  <Fields>
                    <asp:BoundField DataField="OwnerName" HeaderText="OwnerName" ShowHeader="False" SortExpression="OwnerName">
                      <ControlStyle BorderStyle="None" />
                      <ItemStyle BorderStyle="None" />
                    </asp:BoundField>
                    <asp:BoundField DataField="Building" HeaderText="Building" ShowHeader="False" SortExpression="Building" ItemStyle-CssClass="building">
                      <ControlStyle BorderStyle="None" />
                      <ItemStyle BorderStyle="None" />
                    </asp:BoundField>
                    <asp:BoundField DataField="TimeOn" HeaderText="TimeOn" ShowHeader="False" SortExpression="TimeOn">
                      <ControlStyle BorderStyle="None" />
                      <ItemStyle BorderStyle="None" />
                    </asp:BoundField>
                    <asp:BoundField DataField="IPAddress" HeaderText="IPAddress" ShowHeader="False" SortExpression="IPAddress" ItemStyle-CssClass="hide">
                      <ControlStyle BorderStyle="None" />
                      <ItemStyle BorderStyle="None" />
                    </asp:BoundField>
                    <asp:BoundField DataField="PhysicalAddress" HeaderText="PhysicalAddress" ShowHeader="False" ReadOnly="True" SortExpression="PhysicalAddress" ItemStyle-CssClass="hide">
                      <ItemStyle CssClass="hide" />
                    </asp:BoundField>
                    <asp:BoundField DataField="Available" HeaderText="Available" ShowHeader="False" SortExpression="Available" ItemStyle-CssClass="hide">
                      <ItemStyle CssClass="hide" />
                    </asp:BoundField>
                  </Fields>
                  <RowStyle HorizontalAlign="Center" />
                </asp:DetailsView>
              </ContentTemplate>
            </asp:UpdatePanel>
          </div>
        </div>
      </div>
    </div>
  </div>

正如您所看到的,我将DetailsView包裹在中,并在Timer间隔触发器上进行更新。当计时器达到它的间隔时,将回发到数据库并且DetailsView保持最新。这发生在 中,因此页面本身不会刷新。

我不确定如何通过div点击来实现这一目标。我正在尝试点击div,调用ASP按钮,更新SqlDataSource,而不刷新整个页面。 div点击事件现在有效,但未使用。在为此研究解决方案时,我变得有点困惑,就像我错过了一些简单的东西。

任何建议表示赞赏。谢谢!

修改

所以,我创建了一个单独的UpdatePanel并将其结构化......当我点击Button1时,它仍会刷新整个页面...

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"/> 
<asp:UpdatePanel ID="UpdatePanel7" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
        </Triggers>
        <ContentTemplate>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ...
            </asp:SqlDataSource>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="my_Click" />
<asp:Button ID="Button2" runat="server" Text="Button" OnClick="you_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>

我所要做的就是在单击Button1时更新SQL表中的列。它可以工作,但刷新页面。

再次感谢

1 个答案:

答案 0 :(得分:0)

我查看了上面发布的事件输出并回答了我自己的问题。

我将代码隐藏更改为:

protected void my_Click(object sender, EventArgs e) {SqlDataSource1.UpdateParameters["OwnerName"].DefaultValue = "My Name";SqlDataSource1.Update();}

...当然我不再称为Response.Redirect。它现在按预期工作。

谢谢!