我在UpdatePanel中的ASP.Net中有一个gridview,在gridview中我每行都有一个Checkbox和一个Button。如果选中该复选框,则将启用该按钮。如果未选中该复选框,则该按钮将被禁用。在第一页上加载jquery正常工作,在inspect元素中没有错误。但是在我点击运行数据绑定事件的按钮后,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 :
答案 0 :(得分:0)
部分回拨后,您必须bind
event
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(InIEvent);
。最好使用<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(chbActionEvent);
</script>
。
请在页面中添加以下代码:
org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder
有关详细信息,请查看Working with jQuery within the ASP.NET UpdatePanel。
答案 1 :(得分:0)
自己找到了解决方案 问题出在sba.all.js中,稍微修改了一下代码就可以了。