我有一个带有asp:DropDownList(带有AutoPostBack =“true”)的ASP页面,这样当用户更改它时,它会重新加载适当的数据。
在该控件下,我有一个UserControl列表,其中包括一个tinymce编辑器(绑定到asp:TextBox)和一个asp:ImageButton来保存数据。
当单击ImageButton时,应用程序通过ajax将回发数据发送到同一页面(__EVENTARGUMENT,__ EVENTTARGET等...)。为什么它加载ajax页面,我该如何防止它?我正在更新ImageButton上的OnClick事件处理程序中的数据库中的值,所以我需要做的就是获取该ajax调用。
有任何想法吗?
您没有声明您正在使用UpdatePanel,但这可能是您实现了ajax调用的方式。如果是这样,你需要添加一个触发器来从ajax中排除imagebutton事件:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:PostBackTrigger ControlID="ImageButton" />
</Triggers>
<ContentTemplate> </ContentTemplate>
</asp:UpdatePanel>
解决方案1
<asp:ImageButton ID="btn" runat="server" ImageUrl="~/images/yourimage.jpg"
OnClientClick="return false;" />
或解决方案2
<asp:ImageButton ID="btn" runat="server" ImageUrl="~/images/yourimage.jpg"
OnClientClick="yourmethod(); return false;" />
另外(解决方案2),您的javascript方法可能采用这种形式
<script type="text/javascript">
function yourmethod() {
__doPostBack (__EVENTTARGET,__EVENTARGUMENT); //for example __doPostBack ('idValue',3);
}
</script>
在代码背后
protected void Page_Load(object sender, System.EventArgs e)
{
if (this.IsPostBack) {
string eventTarget = this.Request("__EVENTTARGET") == null ? string.Empty : this.Request("__EVENTTARGET");
string eventArgument = this.Request("__EVENTARGUMENT") == null ? string.Empty : this.Request("__EVENTARGUMENT");
}
}