10

我在注册我的 asp.net mvc 3 应用程序(C#)时使用远程验证来检查用户名的可用性。

我将 MVC 远程属性验证用作:

[Remote("IsUserNameAvailable", "User")]
public string UserName { get; set; }

当我返回这个时:

return Json(true, JsonRequestBehavior.AllowGet);

然后我想执行诸如设置隐藏字段值之类的操作,该值是从操作返回或显示绿色图标图像。而且我还想返回真实的ID。

如何实现这个东西?

总之,我想做一些关于成功的事情。

4

1 回答 1

23

实现此目的的一种方法是从验证操作中添加自定义 HTTP 响应标头:

public ActionResult IsUserNameAvailable(string username)
{
    if (IsValid(username))
    {
        // add the id that you want to communicate to the client
        // in case of validation success as a custom HTTP header
        Response.AddHeader("X-ID", "123");
        return Json(true, JsonRequestBehavior.AllowGet);
    }

    return Json("The username is invalid", JsonRequestBehavior.AllowGet);
}

现在在客户端上,我们显然有一个标准表单和一个用户名输入字段:

@model MyViewModel
@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.UserName)
    @Html.ValidationMessageFor(x => x.UserName)
    <button type="submit">OK</button>
}

现在拼图的最后一块是将complete处理程序附加到remote用户名字段上的规则:

$(function () {
    $('#UserName').rules().remote.complete = function (xhr) {
        if (xhr.status == 200 && xhr.responseText === 'true') {
            // validation succeeded => we fetch the id that
            // was sent from the server
            var id = xhr.getResponseHeader('X-ID');

            // and of course we do something useful with this id
            alert(id);
        }
    };
});
于 2012-05-22T16:59:25.337 回答