以下两条来自微软公司的总监Shawn Burke的Blog( http://blogs.msdn.com/sburke/)。
从客户端调用Web Method时发生[Method Error 12031]或[Method Error 500]异常
若要从客户端调用某个服务器端Web Service中的Web Method,则该Web Service必须拥有 Microsoft.Web.Script.Services.ScriptServiceAttribute属性:
[Microsoft.Web.Script.Services.ScriptService()]
public class MyService : System.Web.Services.WebService {
//
}
public class MyService : System.Web.Services.WebService {
//
}
若要从客户端调用某个定义与页面中的Page Method,则该Page Method必须用 Microsoft.Web.Script.Services.ScriptMethodAttribute属性修饰(当然, System.Web.Services.WebMethod也是必不可少的),且 必须为静态(static)方法。目前版本的一个Bug还导致我们 必须在ASPX文件中定义这个Web Method,在CS文件中定义是没有作用的(真是无奈):
<
script
runat
="server"
>
[System.Web.Services.WebMethod]
[Microsoft.Web.Script.Services.ScriptMethod]
public static string GetHtml(string contextKey) {
//
}
</ script >
[System.Web.Services.WebMethod]
[Microsoft.Web.Script.Services.ScriptMethod]
public static string GetHtml(string contextKey) {
//
}
</ script >
在模板控件(例如Login)或者数据绑定控件(例如GridView)中,Extender Control(包括AJAX Control Toolkit)无法正常工作
原因在于,Beta 1中所有的客户端脚本统一由ScriptManager管理,而ScriptManager是在PreRender时期遍历页面中的控件并输出必要的客户端脚本,但模板中的内容通常也是在PreRender时才生成的,这样二者错失了沟通的机会,自然模版中的Extender Control所必须的客户端脚本将不会被发送至浏览器,也就最终导致了Extender Control无法在模板控件中使用。
解决方法就是在PreRender之前,例如Load事件中强制让页面生成模版控件或数据绑定控件的内容,这样在PreRender的时候ScriptManager就可以正确找到他们了:
protected
void
Page_Load(
object
sender, EventArgs e)
{
GridView1.DataBind(); // 数据绑定控件用这个
object o = Login1.Controls; // 模版控件用这个
}
{
GridView1.DataBind(); // 数据绑定控件用这个
object o = Login1.Controls; // 模版控件用这个
}