Dear all,
I migrated my company web applications from Visual Studio 2005, .NetFramework 2.0, ASP.net, Ajax extensions 1.0 to Visual Studio 2008 SP1, .NetFramework 3.5 SP1.
I find that the code that contained AsyncPostBackError, when it is triggered. It will have JScript error.
======HTML Parts=====================================
I simplified the code as follows:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server"
onasyncpostbackerror="ScriptManager1_AsyncPostBackError">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
===============Code Behind C# part =============================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
throw new ArgumentException();
}
protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
{
this.ScriptManager1.AsyncPostBackErrorMessage =
e.Exception.Message;
}
}

An error is appeared:
Microsoft Visual Studio: Microsoft JScript runtime
error:
Sys.WebForms.PageRequestManagerServerErrorException: Value does not
fall within the excepted
range.
=========================================================================================================
And
It can be fixed by the following
solution:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Code in
html^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="frmLogon.aspx.cs"
Inherits="frmLogon" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head
runat="server">
<title></title>
<style
type="text/css">
body {
font-family: Tahoma;
}
#AlertDiv{
left: 40%; top: 40%;
position: absolute;
width: 200px;
padding: 12px;
border: #000000 1px solid;
background-color: white;
text-align: left;
visibility:
hidden;
z-index: 99;
}
#AlertButtons{
position:
absolute;
right: 5%;
bottom: 5%;
}
</style>
</head>
<body id="bodytag">
<form id="form1"
runat="server">
<div>
<asp:ScriptManager ID="scrMgr" runat="server">
</asp:ScriptManager>
<script type="text/javascript"
language="javascript">
var divElem =
'AlertDiv';
var messageElem =
'AlertMessage';
var errorMessageAdditional = 'Please try
again.';
var bodyTag = 'bodytag';
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function ToggleAlertDiv(visString)
{
if (visString == 'hidden')
{
$get(bodyTag).style.backgroundColor = 'white';
}
else
{
$get(bodyTag).style.backgroundColor =
'gray';
}
var adiv =
$get(divElem);
adiv.style.visibility = visString;
}
function ClearErrorState()
{
$get(messageElem).innerHTML =
'';
ToggleAlertDiv('hidden');
}
function EndRequestHandler(sender,
args)
{
if (args.get_error() !=
undefined && args.get_error().httpStatusCode ==
'500')
{
var errorMessage =
args.get_error().message
args.set_errorHandled(true);
ToggleAlertDiv('visible');
$get(messageElem).innerHTML
= '"' +
errorMessage + '" ' +
errorMessageAdditional;
}
}
</script>
<asp:UpdatePanel ID="upPnl" runat="server">
<ContentTemplate>
<asp:Panel
ID="pnlLoginControl" runat="server" BackColor="Transparent" Height="80px"
Width="350px">
<asp:Label ID="lblUser_ID"
runat="server" Text="User
ID"></asp:Label>
<asp:TextBox
ID="txtUser_ID" runat="server" Width="160px"
TabIndex="1"></asp:TextBox><br
/>
<asp:Label
ID="lblUser_Password" runat="server"
Text="Password"></asp:Label>
<asp:TextBox
ID="txtUser_Password" runat="server" Width="160px" TextMode="Password"
TabIndex="2"></asp:TextBox><br
/>
<asp:Button ID="btnLogin" runat="server" Text="Login"
OnClick="btnLogin_Click" TabIndex="3"
Width="80px">
</asp:Button>
</asp:Panel>
<asp:Button ID="btnMakeError"
runat="server" onclick="btnMakeError_Click"
OnClientClick="ClearErrorState()"
Text="Error" />
</ContentTemplate>
</asp:UpdatePanel>
<div
id="AlertDiv">
<div
id="AlertMessage">
</div>
<br
/>
<div id="AlertButtons" >
<input id="OKButton" type="button" value="OK"
runat="server" onclick="ClearErrorState()" />
</div>
</div>
</div>
</form>
</body>
</html>
^^^^^^^^^^^^^^^^^^^^^^^ Code in Code Behind
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
using System;
using System.Data;
using System.Configuration;
using
System.Web;
using System.Web.Security;
using System.Web.UI;
using
System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
using System.Web.SessionState;
using
System.Collections;
using System.Data.SqlClient;
using
System.Xml;
using System.Text;
using
System.Text.RegularExpressions;
using System.Collections.Generic;
using
System.Linq;
public partial class frmLogon : System.Web.UI.Page
{
#region
Variables declaration
// Connection components
private Connection mb_objConn;
private DataSet mb_objDataSet;
private SqlDataAdapter mb_objSqlDaUser;
private SqlCommand
mb_objSqlCmdUser;
private SqlCommand mb_objSqlCmdUser1;
private SqlTransaction mb_objSqlTransaction;
#endregion Variables declaration
#region Init Methods
/* *
* method to init and fill all
* */
private void mb_fnInitFillAll()
{
mb_fnInitUser();
} //
end mb_fnInitFillAll()
/* *
* method to init DataConnection
* */
private
void mb_fnInit()
{
try
{
this.mb_objConn = new Connection(); // true for windows authentication, false
for sql connection
this.mb_objConn.pds_dataSet = new DataSet();
this.mb_objDataSet = this.mb_objConn.pds_dataSet;
} // end try
catch (Exception ex)
{
throw ex;
//Response.Output.Write("<script
language=\"javascript\" type=\"text/javascript\"> alert(\"" +
Misc.fnstringFormatforJavaScript(ex.Message) + "\")
</script>");
} // end catch (Exception ex)
} // end mb_fnInit()
/* *
* method to init User DataAdapter and User
SqlCommand
* */
private void mb_fnInitUser()
{
try
{
this.mb_objSqlCmdUser = new
SqlCommand();
this.mb_objSqlCmdUser.CommandType =
CommandType.Text;
this.mb_objSqlCmdUser.Connection =
this.mb_objConn.pcon_sqlConnection;
this.mb_objSqlCmdUser.CommandText = "select * from tabUser";
this.mb_objSqlDaUser = new
SqlDataAdapter(this.mb_objSqlCmdUser);
this.mb_objSqlDaUser.Fill(this.mb_objDataSet, "tabUser");
} // end
try
catch (Exception ex)
{
throw
ex;
//Response.Output.Write("<script language=\"javascript\"
type=\"text/javascript\"> alert(\"" +
Misc.fnstringFormatforJavaScript(ex.Message) + "\")
</script>");
} // end catch (Exception ex)
//txtUser_Password.Text = "tester";
} // end mb_fnInitUser()
#endregion
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
this.mb_fnInit();
this.mb_fnInitFillAll();
} // end if (!IsPostBack)
Page.Form.DefaultButton = this.btnLogin.UniqueID;
Page.Form.DefaultFocus = btnLogin.UniqueID;
}
protected void
btnLogin_Click(object sender, EventArgs e)
{
try
{
if (Page.IsValid)
{
for (int
i = 0; i < this.mb_objDataSet.Tables["tabUser"].Rows.Count;
i++)
{
if
(this.txtUser_ID.Text.CompareTo(this.mb_objDataSet.Tables["tabUser"].Rows[i]["User_ID"].ToString())
== 0)
{
if
(this.txtUser_Password.Text.CompareTo(this.mb_objDataSet.Tables["tabUser"].Rows[i]["User_Password"].ToString())
== 0)
{
Session.Add("User_ID", this.txtUser_ID.Text);
Session.Add("User_Password",
this.txtUser_Password.Text);
Session.Add("User_Login", "true");
//Session["User_ID"] = this.txtUser_ID.Text;
//Session["User_Password"] =
this.txtUser_Password.Text;
//Session["User_Login"] = "true";
mb_fnUpdateUserCount();
Response.Redirect("./frmMainPage.aspx");
} // end if
(this.txtUser_Password.Text.CompareTo(this.mb_objDataSet.Tables["tabUser"].Rows[i]["User_Password"].ToString())
== 0)
} // end if
(this.txtUser_ID.Text.CompareTo(this.mb_objDataSet.Tables["tabUser"].Rows[i]["User_ID"].ToString())
== 0)
} // end for (int i = 0; i <
this.mb_objDataSet.Tables["tabUser"].Rows.Count; i++)
// Customized Exception statement
Exception ex = new Exception();
ex.Data["ExtraInfo"] =
"Invalid Login ID or wrong password input!";
throw ex;
//Response.Output.Write("<script language=\"javascript\"
type=\"text/javascript\"> alert(\"" + "無效的賬戶名稱或口令輸入!" + "\")
</script>");
} // end if (Page.IsValid)
}
catch (Exception ex)
{
throw
ex;
}
}
protected void scrMgr_AsyncPostBackError(object sender,
AsyncPostBackErrorEventArgs e)
{
if
(e.Exception.Data["ExtraInfo"] != null)
{
this.scrMgr.AsyncPostBackErrorMessage =
e.Exception.Data["ExtraInfo"].ToString();
}
else
{
this.scrMgr.AsyncPostBackErrorMessage
=
e.Exception.Message;
}
} // end scrMgr_AsyncPostBackError(object sender,
AsyncPostBackErrorEventArgs e)
private void mb_fnUpdateUserCount()
{
int
intUser_LoginCount = 0;
mb_objConn.pcon_sqlConnection.Open();
mb_objSqlCmdUser = new
SqlCommand("select max(User_LoginCount) from tabUser " +
"where
User_ID = '" + Session["User_ID"].ToString() + "'");
mb_objSqlCmdUser.Connection = mb_objConn.pcon_sqlConnection;
SqlDataReader objSqlDrUser = mb_objSqlCmdUser.ExecuteReader();
while (objSqlDrUser.Read())
{
if
(objSqlDrUser[0].ToString().Length > 0)
{
intUser_LoginCount = Int32.Parse(objSqlDrUser[0].ToString());
intUser_LoginCount++;
break;
} // end if
(objSqlDrUser[0].ToString().Length > 0)
} // end while (objSqlDrSupplierSProduct.Read())
mb_objConn.pcon_sqlConnection.Close();
//tabUser
try
{
// update
tabUser
StringBuilder sbUpdateSql = new
StringBuilder();
sbUpdateSql.Append("update tabUser
");
sbUpdateSql.Append("set ");
sbUpdateSql.Append("User_LoginCount = " +
Misc.fnstringFormatforSQLStatement(intUser_LoginCount.ToString()) + ",
");
sbUpdateSql.Append("User_LLoginDate = " + "getdate()" + "
");
sbUpdateSql.Append("where User_ID = '" +
Misc.fnstringFormatforSQLStatement(Session["User_ID"].ToString()) + "'");
mb_objSqlCmdUser1 = new SqlCommand();
mb_objSqlCmdUser1.Connection = mb_objConn.pcon_sqlConnection;
mb_objSqlCmdUser1.CommandType = CommandType.Text;
mb_objSqlCmdUser1.CommandText = sbUpdateSql.ToString();
mb_objConn.pcon_sqlConnection.Open();
mb_objSqlTransaction =
mb_objConn.pcon_sqlConnection.BeginTransaction(IsolationLevel.ReadCommitted,
"UserUpTran");
mb_objSqlCmdUser1.Transaction =
mb_objSqlTransaction;
mb_objSqlCmdUser1.ExecuteNonQuery();
mb_objSqlTransaction.Commit();
}
catch (Exception
ex)
{
mb_objSqlTransaction.Rollback("UserUpTran");
throw ex;
}
} // end mb_fnUpdateUserCount()
protected void btnMakeError_Click(object sender, EventArgs e)
{
throw new ArgumentException();
}
}
Is it the bug of .NetFramework 3.5 SP1? or otherthing else?
manpakhong@hotmail.com
Man Pak Hong, Dave
Analyst Programmer