2

在 aspx 页面上的 jQuery 脚本中,我对 UI 进行了更改,这些更改已反映在数据流中发送到代码隐藏 (aspx.vb) 的 dta 变量中。但我不能让他们坚持下去。即使在重新绑定控件之后,页面也会继续恢复到其原始形式。

这是我的脚本:我是 jQuery 初学者...

function btnUpdate() {
    var dta = {};
    $('#sortable').each(function (i) {
        dta['sortable' + (i + 1)] = $(this).text();
    });

    var data_save = $('#Form1').serializeArray();
    data_save.push({ name: "sortable1", value: dta.sortable1});

    var frm = $('#Form1');
    $.ajax({
        type: frm.attr('method'),
        cache: false,
        url: frm.attr('action'),
        data: data_save,
        async: false //Tried both ways??
        // This success section was added later, on a suggestion, but still does not work.
        success: function (data_save) {
            $('.result').html(data_save)
        }
    });
}
<asp:Button ID="btUpdate" runat="server" Text="Update" OnClientClick="btnUpdate();" />

上面脚本中的 dta 正在从 ListView 控件中收集数据。目前在我使用 Pre_render 背后的代码中,但我已经尝试过 Page_Load、Load_Complete、Init,这似乎并不重要:

  Private Sub Page_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender
    If Request.Form("sortable1") <> "" Then
        Dim Sortedlist As String = Request.Form("sortable1")
        ProcessSortChange(Sortedlist)
        BindStudentsRankList() 'This seems to be ignored after it executes.  Oh it has the right values
        'ddlMatches_SelectedIndexChanged(Me, New System.EventArgs())
    End If
End Sub

所以 ProcessSortChange 是一个改变数据库的例程。此代码已确认有效。断开连接位于代码隐藏和更新屏幕之间。这是外观的其余部分,或有问题的面部代码:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
  <ContentTemplate>
    <asp:ListView ID="lvRankList" runat="server" ItemPlaceholderID="itemPlaceholder1">
      <ItemTemplate>
        <li>
          <table>
            <tr>
              <td>
                <%#Eval("SiteCourseID")%>
              </td>
              <td>
                <%# Eval("Rotation")%>
              </td>
              <td>
                <%# Eval("PrimaryPreceptor")%>
              </td>
              <td>
                <%# Eval("ETCategoryName")%>
              </td>
              <td>
                <%#Eval("Rank")%>
              </td>
            </tr>
          </table>
        </li>
      </ItemTemplate>
      <LayoutTemplate>
        <div id="container">
          <ul id="sortable">
            <table class="blue_table" style="font-size: small; border-collapse: collapse;" border="1" rules="all" cellspacing="0">
              <tr>
                <td>

                </td>
              </tr>
              <asp:Placeholder runat="server" ID="itemPlaceholder1" />
          </ul>
        </div>
      </LayoutTemplate>
    </asp:ListView>

    <asp:Button ID="btUpdate" runat="server" Text="Update" OnClientClick="btnUpdate();" />
  </ContentTemplate>
</asp:UpdatePanel>

当我单击“btnUpdate”时,它会点击 1) 脚本中的函数... 2) 然后点击代码隐藏中的 PreRender 代码...但是在完成 jquery Ajax 发布周期后,页面将恢复为其原始形式。

因为我是 jQuery 发布的新手,所以我可能只需要稍微调整一下。哦,还有 1 件事。如果我手动刷新页面,它将显示我请求的新的正确更改。或者,如果我单步执行代码,它在执行时也会显示代码一切都是准确的,只是最终没有正确显示。

4

0 回答 0