我希望用webservice在参数指定的页面注册js代码,代码如下:
[WebMethod]
public void regClickScript(System.Web.UI.Page _page)
{
String scriptString = "<script language=JavaScript> function DoClick() {";
scriptString += "myForm.show.value='Welcome to Microsoft .NET'}<";
scriptString += "/";
scriptString += "script>";
if(!_page.IsClientScriptBlockRegistered("clientScript"))
_page.RegisterClientScriptBlock("clientScript", scriptString);
}
编译没有问题,但是运行service页面会报如下错误:
类型“System.Web.UI.Control”上的属性“ClientID”无法序列化,因为它是用说明性安全权限属性修饰的。请考虑在属性访问器中使用命令性断言或请求。如果我不使用webservice只是作为普通方法就没有问题,难道webservice不能接受Page作为参数么?
是的,不可能,凡是无法序列化得对象都无法作为webservice的参数或者返回值.webservice本身是不是什么页面的东西,它只是个访问点而已,运行时出现的页面是.NET给方便调试而生成的....
webservice为什么可以在网络上传送对象? 这有赖于.net提供的两种“序列化”的方法,它可以他对象转换成soap或者xml的格式,只有这样对象才可以传送并还原.
自定义的类,可以添加[Serializable]标签让它“可序列化”,但是如果类中包含了任何不可序列化的成员(例如控件的ClientID属性),那么它就是“不可序列化”,所以,Page是不可能的。
