关于ScriptManager和UpdatePanel的正确使用姿势,Button点击后随Repeater项目数量执行多次的问题

Amy安 2019-07-26 07:47:20

<html>
<head>
<script>
function aAjaxFun(){
var aj = jQuery.ajax({
url: 'mService.asmx/aAjaxFun,
data: {
info: info
},
type: 'post',
dataType: 'text',
success: function (data) {
alert("保存成功!");
return true;
},
error: function () {
alert("保存失败!");
return false;
}
});
}
function aAfterFun(){
alert(1);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:HiddenField ID="hfID" runat="server" Value="" />
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
<ContentTemplate>
<asp:Button ID="btn1" runat="server" Text="1" OnClick="btn1_Click" />
<asp:Button ID="btn2" runat="server" Text="2" OnClick="btn2_Click" />
<asp:Button ID="btn3" runat="server" Text="3" OnClientClick="return aAjaxFun()" />
<asp:Button ID="btn4" runat="server" Text="4" OnClick="btn4_Click" />
<asp:Repeater ID="rptList" runat="server" >
<ItemTemplate>
<asp:TextBox ID="tbValue" runat="server" Text="2"/>
</ItemTemplate>
</asp:Repeater>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btn1" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="btn2" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="btn4" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</form>

</body>
</html>





protected void Page_Load(object sender, EventArgs e)
{
LogManager.write();
}

protected void btn1_Click(object sender, EventArgs e)
{
SQLHelper.ExecSQL("insert into table values '1'");
LogManager.write();
}
protected void btn2_Click(object sender, EventArgs e)
{
int a = 1;
int count = SQLHelper.ExecSQL("insert into table1 values '"+a+"'");
if(count >0)
{
ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "sa", "aAfterFun()", true);
}
LogManager.write();
}

protected void btn4_Click(object sender, EventArgs e)
{
SQLHelper.ExecSQL("insert into table2 values '2'");
LogManager.write();
}


操作 依次点击 btn1 btn2 btn3 btn4

js function aAfterFun()没有执行
aAjaxFun有执行 成功结果

日志:
2019-07-26 19:33:34: Page_Load:2019/7/26 19:33:34
2019-07-26 19:33:38: Page_Load:2019/7/26 19:33:38
2019-07-26 19:33:38: btn1_Click:2019/7/26 19:33:38
2019-07-26 19:33:40: Page_Load:2019/7/26 19:33:40
2019-07-26 19:33:40: btn2_Click:2019/7/26 19:33:40
2019-07-26 19:33:41: Page_Load:2019/7/26 19:33:41
2019-07-26 19:33:42: Page_Load:2019/7/26 19:33:42
2019-07-26 19:33:42: btn4_Click:2019/7/26 19:33:42

若使用UpdateMode="Conditional"则日志最后面还多一条进Page_Load的


table1写入1条记录

若rptList有2条记录: table2写入3条记录

若rptList有4条记录: table2写入5条记录

不管是日志还是断点都表明btn4_Click只执行了一次 唯独table2写入多条记录不可思议

...全文
145 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Amy安 2019-07-29
  • 打赏
  • 举报
回复
最近发现可能是别的东西影响了 但是什么因素会造成这样的影响呢

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧