Ajax用户名可用性检查无法在asp.net mvc中运行

时间:2015-12-20 08:09:34

标签: jquery ajax asp.net-mvc

当用户在文本字段中输入用户名时,我正在使用$(document).ready(function() { $('label').click(function() { $('label').removeClass('strong'); $('label').next('p').removeClass('strong'); $(this).next('p').addClass('strong'); $(this).addClass('strong'); }); }); asp.net mvc 4来检查用户名可用性。出于某种原因,我在浏览器控制台中收到jquery 1.9.1。这是我的代码,

控制器

Internal Server Error 500

查看

    [HttpPost]
    public JsonResult chkPrevUser(string username)
    {
        var prevUser = rentdb.Regs.Where(p => p.username == username).FirstOrDefault();

        if (prevUser.username == username)
        {
            return Json(false);
        }
        else
        {
            return Json(true);
        }
    }

我的代码中有什么问题吗?如何解决此问题并检查ajax是否已存在用户名?急需这个帮助!感谢。

3 个答案:

答案 0 :(得分:1)

因为您的查询

而引发500 (Internal Server Error)
var prevUser = rentdb.Regs.Where(p => p.username == username).FirstOrDefault();

将返回找不到匹配项的null,因此您的以下代码行

if (prevUser.username == username)

会抛出NullReferenceException,因为您无法访问username的{​​{1}}属性

将代码更改为

null

但是我建议你删除你的脚本,而是使用if (prevUser == null) { return Json(false); } else { return Json(true); } ,它将作为

应用于你的属性
RemoteAttribute

只需将控制器方法更改为[Remote("chkPrevUser", ErrorMessage = "The user name already exists")] public string username { get; set; } ,并将return语句更改为添加[HttpGet]参数(例如JsonRequestBehavior.AllowGet)。有关更多信息,请参阅How to: Implement Remote Validation in ASP.NET MVC

如果您选择保留脚本,我建议进行以下更改

  1. 处理return Json(true, JsonRequestBehavior.AllowGet);事件而不是.change()。目前如果 用户试图输入一个10个字符的用户名,一个 在4到9日对服务器进行不必要的调用 这些字符会返回一个恼人且毫无意义的错误 信息。请注意.keyup()最初处理RemoteAttribute事件(即在用户选中文本框之前不执行验证),如果其无效,则在用户进行处理时处理.change()事件编辑。

  2. 使用.keyup()代替 '@Url.Action("chkPrevUser", "Home")'以确保您的网址始终正确无误 产生

答案 1 :(得分:0)

服务器错误500表示服务器在大多数情况下抛出异常。调试您的方法,看看导致异常的原因。

答案 2 :(得分:0)

[Remote]属性在此上应该像灵符一样工作。尝试这些步骤,它对我的​​应用程序有效。

1)模型文件夹中的Viewmodel类

[Remote("IsAlreadySigned", "User", HttpMethod = "POST", ErrorMessage = "Username already exists in database. Try another Username")]
        public string Username { get; set; }

2)在用户控制器中创建这2个操作。

[HttpPost]
        public JsonResult IsAlreadySigned(string Username)
        {

            return Json(IsUserAvailable(Username));

        }
        public bool IsUserAvailable(string UserN)
        {
            // Assume these details coming from database  
            List<UserVM> RegisterUsers = new List<UserVM>()
        {

            new UserVM {Username = UserN }

        };
            using (Db db = new Db())
            {


                var UserId = db.User.Where(x => x.Username == UserN).Select(x => new { UserN }).FirstOrDefault();

                bool status;
                if (UserId != null)
                {
                    //Already registered  
                    status = false;
                }
                else
                {
                    //Available to use  
                    status = true;
                }


                return status;
            }
        }

3)使用UserVM类Model创建新的视图“注册”。

现在,尝试一下,当您从“注册”表单的“用户名”字段中跳出时,就会看到错误。