我正在使用jQuery數據表插件以及asp.net轉發器。我只是在轉發器的第一列中有一個複選框,以允許用戶檢查他們想要保存到數據庫的記錄。我有中繼器,jquery插件與分頁工作100%。我無法解決的問題是,當我在多個頁面上選中一個框並點擊提交時,我只能獲取當前頁面複選框,因爲所有其他複選框都未選中。asp.net轉發器和jQuery datables分頁和複選框不工作
.NET標記
<script type="text/javascript">
var oTable;
$(document).ready(function() {
oTable = $('#tblList').dataTable({
"bJQueryUI": true,
"sPaginationType": "full_numbers",
"bServerSide": false,
"iDisplayLength": 7,
"aaSorting": [[1, "asc"]],
"bFilter": true,
"bLengthChange": false,
"aoColumns": [
/* other columns */null, null, null, null],
"sDom": 'T<"toolbar">lrtip'
});
});
</script>
<asp:Panel ID="pnlPages" runat="server" Visible="false">
<asp:Repeater ID="rptList" runat="server" OnItemDataBound="RptList_ItemDataBound">
<HeaderTemplate>
<table id="tblList" cellpadding="0" cellspacing="0" border="0" class="display">
<thead>
<tr>
<th></th>
<th>Name</th>
<th>Status</th>
<th>Modified</th>
</tr>
</thead>
<tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<asp:HiddenField ID="hdnID" runat="server" Value='<%# Eval("ID") %>' />
<td style="width: 5%"><asp:CheckBox ID="chkSelected" runat="server" OnCheckedChanged="Save_OnChecked" AutoPostBack="true" value='<%# Eval("ID") %>' /></td>
<td style="width: 47%"><%# Eval("Name")%></td>
<td style="width: 7%"><%# Eval("Status") %></td>
<td style="width: 25%"><%# ((DateTime)Eval("DateModified")).ToShortDateString() %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</tbody>
</table>
</FooterTemplate>
</asp:Repeater>
</asp:Panel>
在頁面加載我叫下面的方法,並提供清單
public void DisplayList(List<MyPages> list)
{
rptList.DataSource = list;
rptList.DataBind();
pnlPages.Visible = true;
}
這這種方法從數據庫中檢查框
protected void RptList_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
{
string groupID = !string.IsNullOrEmpty(Request.QueryString["id"]) ? Request.QueryString["id"] : string.Empty;
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
HiddenField pageID = (HiddenField)e.Item.FindControl("hdnID");
GroupPage groupPage = groupsPresenter.GetByKeys(new Guid(groupID), new Guid(pageID.Value));
if (groupPage != null)
{
CheckBox chk = (CheckBox)e.Item.FindControl("chkSelected");
chk.Checked = true;
}
}
}
所有上述代碼的作品。這是停止工作的地方。當用戶選中一個框時,將執行以下代碼。
protected void Save_OnChecked(object sender, EventArgs e)
{
CheckBox chk = (CheckBox)sender;
string id = chk.Attributes["value"].ToString();
}
我在調試的時候,如果我有4行第1頁上的檢查,我去到第2頁,並取消一箱Save_OnChecked事件被稱爲所有的複選框的主頁成爲選中的注意。所以Save_OnChecked總共被調用5次。
如果我沒有使用數據表分頁和第一頁上的所有記錄,那麼它工作得很好。希望這是有道理的,我希望有人能幫助我。