加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

updatepanel – 更新面板不显示ASP.NET 3.5中的错误

发布时间:2020-12-16 07:36:52 所属栏目:asp.Net 来源:网络整理
导读:在Visual Studio 2008中,如果您创建一个新的“Ajax 1.0启用的ASP.NET 2.0 Web应用程序”并粘贴以下代码: form id="form1" runat="server" asp:ScriptManager ID="ScriptManager1" runat="server" / div asp:UpdatePanel ID="UpdatePanel1" runat="server" C
在Visual Studio 2008中,如果您创建一个新的“Ajax 1.0启用的ASP.NET 2.0 Web应用程序”并粘贴以下代码:

<form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <div>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Button runat="server" ID="foo" Text="click me" onclick="foo_Click" />      
            </ContentTemplate>
        </asp:UpdatePanel>
        </div>
    </form>

代码背后

protected void foo_Click(object sender,EventArgs e) {
            throw new Exception("hello");
        }

然后单击按钮,您将看到一个“hello”的javascript警报.如果您创建.NET 3.5 Web应用程序并粘贴相同的代码,则不再显示任何警报.我错过了什么?

解决方法

ASP.NET AJAX Extensions 1.0和ASP.NET AJAX 3.5中的默认行为肯定会发生变化.通过查看Sys.WebForms.PageRequestManager的默认endPostBack事件处理程序可以看到这一点.前一版本使用警报显示错误,而后一版本仅重新显示错误.

// ASP.NET AJAX Extensions 1.0
function Sys$WebForms$PageRequestManager$_endPostBack(error,response) {
  this._processingRequest = false;

  this._request = null;
  this._additionalInput = null;

  var handler = this._get_eventHandlerList().getHandler("endRequest");
  var errorHandled = false;
  if (handler) {
    var eventArgs = new Sys.WebForms.EndRequestEventArgs(error,this._dataItems,response);
    handler(this,eventArgs);
    errorHandled = eventArgs.get_errorHandled();
  }
  this._dataItems = null;
  if (error && !errorHandled) {
    alert(error.message);
  }
}


// ASP.NET 3.5
function Sys$WebForms$PageRequestManager$_endPostBack(error,executor,data) {
  if (this._request === executor.get_webRequest()) {
    this._processingRequest = false;
    this._additionalInput = null;
    this._request = null;
  }
  var handler = this._get_eventHandlerList().getHandler("endRequest");
  var errorHandled = false;
  if (handler) {
    var eventArgs = new Sys.WebForms.EndRequestEventArgs(error,data ? data.dataItems : {},executor);
    handler(this,eventArgs);
    errorHandled = eventArgs.get_errorHandled();
  }
  if (error && !errorHandled) {
    throw error;
  }
}

如果您希望警报出现在ASP.NET AJAX 3.5代码中,您只需进行一些小的更改即可.

首先,您需要为ScriptManager的AsyncPostBackError事件添加处理程序,然后设置AsyncPostBackErrorMessage.

protected void ScriptManager1_AsyncPostBackError(object sender,AsyncPostBackErrorEventArgs e)
{
    ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message;
}

然后,您需要为客户端PageRequestManager的endRequest事件添加处理程序.在那里,您可以在服务器端获取AsyncPostBackErrorMessage,并使用Alert向用户显示消息.

function pageLoad()
{
  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(onEndRequest);  
}

function onEndRequest(sender,args)
{
  var msg = args.get_error().message;
  alert(msg);
  args.set_errorHandled(true);
}

我希望这有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读