当前位置:编程学习 > C#/ASP.NET >>

用户控件中使用 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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,