【发布时间】:2017-05-10 08:46:07
【问题描述】:
我在 ASP.Net 中的 UpdatePanel 中有一个 gridview,在 gridview 中我的每一行都有一个复选框和一个按钮。如果选中该复选框,则该按钮将被启用。如果未选中该复选框,则该按钮将被禁用。在第一页加载 jquery 正常工作,在检查元素中没有错误。但是在我点击了运行数据绑定事件的按钮后,gridview根据需要发生了变化,但是inspect中出现了错误,并且click事件不起作用。
这是我的 aspx 代码
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/PopUp.Master" AutoEventWireup="true" CodeBehind="abc.aspx.cs" Inherits="HMB.Sbadmin.Web.Pages.T.abc" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
<script type="text/javascript">
$(document).ready(function () {
chbActionEvent();
});
function pageLoad(sender, args) {
if (args.get_isPartialLoad()) {
chbActionEvent();
}
}
function chbActionEvent() {
$('.master_grid span.UnSettled').each(function () {
var chbAction = $(this).find('input:checkbox').attr('id');
$('#' + chbAction).change(function () {
var btnSettle = $(this).closest('tr').find(':submit').attr('id');
alert(chbAction + btnSettle);
if ($(this).is(':checked')) {
$('#' + btnSettle).attr('disabled', false);
}
else {
$('#' + btnSettle).attr('disabled', true);
}
});
});
}
</script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:UpdatePanel ID="upMain" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div id="gridContainer">
<ul class="link_path">
<li>
<asp:Button ID="btnRefresh" runat="server" Text="Refresh" OnClick="btnRefresh_Clicked" CssClass="uiButton uiButtonConfirm" CausesValidation="false" />
</li>
</ul>
<div id="dvMain" runat="server">
<asp:gridview ID="gvMain" runat="server" AutoGenerateColumns="False"
CssClass="master_grid"
HeaderStyle-CssClass="header"
OnRowDataBound="gvMain_RowDataBound"
OnRowCommand="gvMain_RowCommand">
<Columns>
<asp:TemplateField HeaderStyle-Width="50px" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:CheckBox ID="chbAction" runat="server" CausesValidation="false" CssClass="UnSettled"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-Width="120px" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Literal ID="ltrSettle" Text='<%# Eval("Settle") %>' runat="server" Visible="false"></asp:Literal>
<asp:Button ID="btnSettle" runat="server" CssClass="UnSettled uiButton uiButtonConfirm" CommandName="cmdSettle" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' CausesValidation="false" Enabled="false"/><br />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:gridview>
<div>
<asp:Label ID="lblError" runat="server" ForeColor="Red"></asp:Label>
</div>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
我也尝试将代码放入 RowDataBound 中: `
protected void gvMain_RowDataBound(object sender, GridViewRowEventArgs e)
{
switch (e.Row.RowType)
{
case DataControlRowType.Header:
setDataBoundHeader(e.Row);
break;
case DataControlRowType.DataRow:
if (gvMain.Rows.Count >= 0 && (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate))
{
setDataBoundList(e.Row);
}
break;
}
}
protected void setDataBoundList(GridViewRow row)
{
CheckBox chbAction = (CheckBox)row.FindControl("chbAction");
chbAction.Attributes.Add("OnClick", "chbActionEvent()");
}
`
但是,没有运气。
请帮忙。
更新 1.1:
也试过这个:`
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
<script type="text/javascript">
$(document).ready(function () {
chbActionEvent();
});
//function pageLoad(sender, args) {
// if (args.get_isPartialLoad()) {
// chbActionEvent();
// }
//}
function chbActionEvent() {
$('.master_grid span.UnSettled').each(function () {
var chbAction = $(this).find('input:checkbox').attr('id');
$('#' + chbAction).change(function () {
var btnSettle = $(this).closest('tr').find(':submit').attr('id');
alert(btnSettle);
if ($(this).is(':checked')) {
$('#' + btnSettle).attr('disabled', false);
}
else {
$('#' + btnSettle).attr('disabled', true);
}
});
});
}
</script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(chbActionEvent);
</script>
<asp:UpdatePanel ID="upMain" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div id="gridContainer">
<ul class="link_path">
更新 1.2:
尝试使用 Microsoft Visual Studio 进行调试。在第一次尝试时,按钮事件正常工作。但是在部分回发之后(在我第一次单击该按钮之后),该复选框仍然可以正常工作(检查时出错),但是单击该按钮时没有执行任何操作。
更新 1.3:
【问题讨论】:
-
控制台你的 btnSettle 变量..
-
btnSettle 变量总是返回正确的 id,例如:MainContent_gvMain_btnSettle_1
标签: javascript c# jquery asp.net gridview