大家知道,在普通的C#方法中可以通过Page.RegisterClientScriptBlock、Response.Write等方法实现客户端的Javascript代码,但是在AjaxMethod中,使用上面的方法却不能将Script代码加到客户端。如果我们想在AjaxMethod中alert出异常信息,或者alert出一些调试信息的话,很不方便。
使用下面的方法可以在AjaxMethod中alert出信息:
我们可以把要alert出来的信息加到Ajax返回对象的error属性中,通过异常的方式抛出来,在客户端截获异常信息,并把它alert出来既可。
Ajax返回的对象常用的属性有两个:
l value:返回对象的值;
l error:错误信息。据文档说,error有两个属性:name和message,其中的name即异常类的全名,message是错误信息。
但是我没有试出message属性,使用message时,总报出“undefined”。我们可以取error中除name属性外的子串来得到错误信息。 例如: 要alert出C#类的AjaxMethod GetPlantCode(string strCompID)方法中出现的异常信息:
1.在AjaxMethod中抛出异常信息
[Ajax.AjaxMethod]
public string GetPlantCode(string strCompID)
{
string strPlant = "";
SortedList list = null;
try
{
list = person.getPlantByComp(strCompID);
}
catch (SqlException e)
{
throw new EPurchaseException(e); //抛出异常
}
……
}
2.在javascript方法中调用改AjaxMethod
如果我们在initPlant中调用了Ajax方法GetPlantCode(string compID),而在GetPlantCode_CallBack方法中对Ajax方法的返回值进行处理,
function initPlant()
{
var compID = form1.C2.value;
PurchaseRequest_FillPR.GetPlantCode(compID, GetPlantCode_CallBack);
}
3.在AjaxMethod返回对象的处理方法中截获错误信息并alert出来
function GetPlantCode_CallBack(result)
{
if (result.error != null)
{
var error = result.error + "";
alert(error.substring(error.indexOf(" ") + 1, error.length));
//得到error中的错误信息
return;
}
……
}
注:AjaxPro中有error.Message方法可以直接提取出异常的Message,但是Ajax.NET中没有此功能,如果我们直接alert出error信息的话,它会连异常类和异常信息一起alert出来:
我们可以把error信息做一下处理,使之alert出error的错误信息:
var error = result.error + "";
//加个空串,把error对象转换为string类型,
//否则在error.substring(…)中会报javascript错误。
alert(error.substring(name.length + 1, error.length));
//去掉前面的异常类名
这样alert出来的就只有异常类的message了。