【问题标题】:ASP.NET MVC username availability checkASP.NET MVC 用户名可用性检查
【发布时间】:2011-11-20 08:09:01
【问题描述】:

我已经阅读了很多分步教程,但仍然无法让我的代码工作,我浏览了这个网站上的解决方案也没有运气,我不知道我做错了什么。

我正在使用jQuery,想知道用户名“mark”是否被占用,我什至还没有到达数据库链接。

[HTML]

<input id="user_name" name="user_name" onchange="UserCheck()" type="text" value="" />
<div id="status" />

[JS]

function UserCheck() {
    $("#status").html("Checking....");
    $.post("/user/check",
    { username: $("#user_name").val() },
    function (data) {
        if (data == 0) {
            $("#status").html("Available");
        }
        else {
            $("#status").html("Taken");
        }
    });
}


[Controller]

public JsonResult check(FormCollection form)
{
    System.Threading.Thread.Sleep(3000);
    string name = form["username"];

    if (name.Equals("mark")){
        return Json(1);
    } else {
        return Json(0);
    }
}

【问题讨论】:

  • 您正在使用 AJAX 对“check”方法进行发布,该方法正在等待看起来像 FormCollection 对象的东西,将其切换为字符串而不是像“JsonResult check(string name)”跨度>
  • 提供更多关于什么是问题的信息... ajax 调用是否正常? (使用萤火虫看到这个),你是用它调用的动作方法吗? (使用刹车点)如果是,是否有任何服务器端错误?帮助我们帮助您。
  • 试试@Joakim 所说的。另外,在你的 $.post 中添加一个 on error 函数,看看请求是否有效,但响应是错误的。数据实际上可能包含您发回的 1,但 jQuery 看到错误响应,因此不会调用您的 on success 函数。
  • 您是否使用过 fiddler 或类似的工具来查看进行 ajax 调用时返回的内容?它甚至到达服务器上的操作吗?

标签: jquery asp.net asp.net-mvc


【解决方案1】:

查看以下链接:

Check Instantly If Username Exists - ASP.NET MVC Remote Validation

您需要的是 RemoteAttribute 用于您正在检查的属性,并且您还需要实现一个控制器操作,该操作返回带有布尔值的 JsonResult

这是一个简短的示例:

你的模特:

    [Required]
    [Display(Name = "User name")]
    [Remote("doesUserNameExist", "Account", HttpMethod = "POST", ErrorMessage = "User name already exists. Please enter a different user name.")]
    public string UserName { get; set; } 

你的行动结果:

[HttpPost]
public JsonResult doesUserNameExist(string UserName) {

    var user = Membership.GetUser(UserName);

    return Json(user == null);
}

您可以根据需要调整操作结果中的业务逻辑。

此外,请确保您的注册页面上引用了以下库以及您的 jQuery 文件:

jquery.validate.min.js

jquery.validate.unobtrusive.min.js

上面的博客文章涵盖了您需要的一切。

注意

请记住,Remote 验证不会在服务器端启动。您可能想查看以下链接以获取服务器端远程验证(我不建议在生产中使用它,它充满了漏洞,但它会给您一个想法)

http://www.tugberkugurlu.com/archive/asp-net-mvc-server-side-remote-validation

【讨论】:

  • 不使用远程属性就没有办法了吗?基本上让我的代码以某种方式工作。
  • 当然有。手动对控制器操作进行 ajax 调用。但这需要您做很多工作:您需要检查这是否可以与您当前的验证系统、验证显示逻辑等一起使用。
  • @Cindro 没有办法让它不起作用。该项目的完整代码在 GitHub 上:github.com/tugberkugurlu/MvcRemoteValidationSample 看看。你可能做错了什么。
  • 我让它工作了,但我想知道为什么我的代码不工作,我主要感兴趣的是什么,我更喜欢我的干净代码。为什么我的代码不起作用?
  • @Cindro 你确定你的 ajax 调用顺利地进入你的控制器动作吗?启动调试会话并在检查方法上放置断点以查看您得到的结果。此外,使用 fiddler 之类的工具检查您的呼叫,以查看您发送和获取的内容。
【解决方案2】:

请参阅我关于此主题的完整文章。 How to: Implement Remote Validation in ASP.NET MVC

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多