用户控件中使用 AjaxPro 问题,无法识别类名
使用AjaxPro制作无刷新注册。将注册写成用户控件后提示 “<命名空间.类名>未定义”错误,我差看了好多网上的信息,都没有明确的解决办法,是否用户控件里就无法在使用AjaxPro了。下面是网上的一个测试代码,我按同样的新建一个.NET页面是正常的,但是写成用户控件就提示错误。
客户端JS代码
<script language="jscript">
function VerifyUsername(name)
{
Userreg.GetReturnCode(name,IsUsernameExist_callback);
}
function IsUsernameExist_callback(res)
{
var msg = document.getElementById("pwdInfor");
var bRet = res.value;
if(bRet == "0")
{
msg.innerHTML = "用户名存在!";
msg.style.color = "green";
}
else if(bRet == "1")
{
msg.innerHTML = "用户名长度必须在3到15之间,且不包含字母、数字和下划线以外的字符!";
msg.style.color = "red";
}
else
{
msg.innerHTML = "用户名不存在!";
msg.style.color = "red";
}
}
</script>
用户控件中代码:
/// <summary>
/// 控件初始化
/// </summary>
protected override void InitializeSkin(System.Web.UI.Control skin)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(YunBao.Controls.Userreg), this.Page);
TextBox2 = (TextBox)skin.FindControl("TextBox2");
TextBox2.Attributes.Add("onblur", "VerifyUsername(this.value)");
}
//加上[AjaxPro.AjaxMethod],才能被客户端访问
[AjaxPro.AjaxMethod]
public string GetReturnCode(string strUsername)
{
if (!IsValidUsername(strUsername))
{
return "1";
}
else if (!IsUsernameExist(strUsername))
{
return "2";
}
else
{
return "0";
}
}
....其他省略...
错误提示:Userreg 未定义。
请高手指点解决方法,或者如果ajaxpro无法支持用户控件,是否换其他的可以实现。谢谢了。 --------------------编程问答-------------------- 代码贴得时候有些修改。
YunBao.Controls 是命名空间
但是无论是这样写
AjaxPro.Utility.RegisterTypeForAjax(typeof(YunBao.Controls.Userreg), this.Page);
还是这样写
AjaxPro.Utility.RegisterTypeForAjax(typeof(Userreg), this.Page);
都提示错误 --------------------编程问答-------------------- 怎么好像代码里有的是回调,有的是AjaxPro呢。。 --------------------编程问答-------------------- AjaxPro.Utility.RegisterTypeForAjax(typeof(Userreg), this.Page);
应该放在page_load时间当中
--------------------编程问答-------------------- 试试:
YunBao.Controls.Userreg.GetReturnCode(name,IsUsernameExist_callback);
--------------------编程问答-------------------- function VerifyUsername(name)
{
--> Userreg.GetReturnCode(name,IsUsernameExist_callback);
Userreg_UserControls.GetReturnCode(name,IsUsernameExist_callback);
//Userreg_UserControls这个名是,页面在客户端创建之后的控件名称,你自己在页面装载完查看原代码
//找到那个用户控件的名字,那个才是javascript能找到的控件名。
} --------------------编程问答-------------------- http://topic.csdn.net/u/20071101/20/89e3ff5c-d8c4-4460-ae1c-6cd6c8824326.html
这里有人讲到,是在使用用户控件时,无法识别命名空间名称。
上面大家提到的方法我都试过了,没有用。 --------------------编程问答-------------------- 你在检查下不使用AjaxPro,换个思路 --------------------编程问答-------------------- 页面的生命生期的问题 --------------------编程问答-------------------- 不知道你是网站还是web应用程序,我在web应用程序下实验通过了:
1.用户控件的命名空间去掉:即
AjaxPro.Utility.RegisterTypeForAjax(typeof(YunBao.Controls.Userreg), this.Page);
改为
AjaxPro.Utility.RegisterTypeForAjax(typeof(Userreg), this.Page);
2.用户控件的.ascx抬头的那句改为 Inherits="Userreg"
3.web应用程序有三个文件,aspx,cs和designer,将要使用这个用户控件的页面的designer文件打开,找到用户控件在此调用文件的名称(Userreg1),将其前面的命名空间一大串东西都去掉。
即可通过。 --------------------编程问答-------------------- 写一个.ashx,把Ajax方法定义到里面,用户控件中直接写调用,在引用用户控件的页面里注册。
例如:
XXX.Ajax:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[AjaxPro.AjaxNamespace("AjaxSpace")]
public class MenuTabHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(MenuTabHandler));
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
}
public bool IsReusable
{
get
{
return false;
}
}
#region AjaxMethod
[AjaxPro.AjaxMethod]
public string MyAjax(string sisGuid)
{
...
}
}
.aspx.cs:
[AjaxPro.AjaxNamespace("AjaxSpace")]
public partial class ProfitTotalAnalysis : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(MenuTabHandler));
}
}
补充:.NET技术 , ASP.NET