用户控件中使用 AjaxPro 问题,无法识别类名

Xiaoxiong511 2007-11-28 01:03:13
使用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无法支持用户控件,是否换其他的可以实现。谢谢了。
...全文
484 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
BiYeYiZhouNian 2012-09-25
  • 打赏
  • 举报
回复
写一个.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));
}
}
cainong2001 2010-09-02
  • 打赏
  • 举报
回复
不知道你是网站还是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),将其前面的命名空间一大串东西都去掉。

即可通过。
大正他爹 2007-11-29
  • 打赏
  • 举报
回复
页面的生命生期的问题
huisheng 2007-11-29
  • 打赏
  • 举报
回复
你在检查下不使用AjaxPro,换个思路
zj1989 2007-11-28
  • 打赏
  • 举报
回复
function VerifyUsername(name)
{
--> Userreg.GetReturnCode(name,IsUsernameExist_callback);
Userreg_UserControls.GetReturnCode(name,IsUsernameExist_callback);
//Userreg_UserControls这个名是,页面在客户端创建之后的控件名称,你自己在页面装载完查看原代码
//找到那个用户控件的名字,那个才是javascript能找到的控件名。
}
usxue 2007-11-28
  • 打赏
  • 举报
回复
试试:
YunBao.Controls.Userreg.GetReturnCode(name,IsUsernameExist_callback);
xuan.ye 2007-11-28
  • 打赏
  • 举报
回复
AjaxPro.Utility.RegisterTypeForAjax(typeof(Userreg), this.Page);


应该放在page_load时间当中

DAVID__LAU 2007-11-28
  • 打赏
  • 举报
回复
怎么好像代码里有的是回调,有的是AjaxPro呢。。
Xiaoxiong511 2007-11-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20071101/20/89e3ff5c-d8c4-4460-ae1c-6cd6c8824326.html
这里有人讲到,是在使用用户控件时,无法识别命名空间名称。

上面大家提到的方法我都试过了,没有用。
Xiaoxiong511 2007-11-28
  • 打赏
  • 举报
回复
代码贴得时候有些修改。
YunBao.Controls 是命名空间
但是无论是这样写
AjaxPro.Utility.RegisterTypeForAjax(typeof(YunBao.Controls.Userreg), this.Page);
还是这样写
AjaxPro.Utility.RegisterTypeForAjax(typeof(Userreg), this.Page);

都提示错误

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧