1

我有一个页面,允许管理员使用用户名和密码一次将多个用户添加到数据库中。我使用远程用户名检查,所以在我的帐户模型中我有这个:

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

// ...etc

}

在我的帐户控制器中,我有这个:

    [HttpPost]
    public JsonResult doesUserNameExist(string UserName)
    {

        var user = Membership.GetUser(UserName);
        return Json(user == null);
    }

现在,这可以很好地在单个表单上运行,使用 mvc html 帮助程序创建一个用户。当我在字段中输入用户名时,会显示正在使用用户名的消息。但是在这种不使用 mvc 帮助程序,而不是纯 html 和 javascript 的表单上,它不会显示:

@model List<PicsWebApp.Models.UserRegisterModel>

@{
    ViewBag.Title = "NewRep";
}

<div class="col-lg-12">
    <h1>First-Time Setup</h1>
</div>
<legend></legend>
<div class="col-lg-12">
    <h3>Add Representatives <small>You can add more representatives later</small></h3>
    @using (Html.BeginForm("NewRep", "Admin", new { jobid = ViewData["jobid"] }, FormMethod.Post, new { @class = "form" }))
    {
            @Html.ValidationSummary(true)
        <p>
            <a href="@Url.Action("Index", "Home")" class="btn btn-warning">Skip</a>
            <input type="submit" class="btn btn-primary" />
            <button type="button" class="btn btn-default" id="add">Add Rep</button>
        </p>
        <div id="fieldform" class="col-lg-12">
            <div id="container0" class="col-lg-4" style="background-color: #eee; border: 4px solid white;">
                <h4 style="text-align: center">New Rep</h4>
                <div class="form-group">
                    <label>Representative Name</label><input type="text" class="form-control" name="models[0].RepName" />
                </div>
                <div class="form-group">
                    <label>Contact Number</label><input type="text" class="form-control" name="models[0].ContactNumber" />
                </div>
                <div class="form-group">
                    <label>Rep Username</label><input type="text" class="form-control" name="models[0].UserName" />
                    <input class="text-box single-line" data-val="true" data-val-remote="User name already exists. Please enter a different user name." data-val-remote-additionalfields="*.UserName" data-val-remote-type="POST" data-val-remote-url="/Account/doesUserNameExist" data-val-required="The User name field is required." id="UserName" name="models[0].UserName" type="text">
                <span class="field-validation-valid" data-valmsg-for="UserName" data-valmsg-replace="true"></span>
                </div>
                <div class="form-group">
                    <label>Location</label><select id="select-0" class="form-control" name="models[0].Location"></select>
                </div>
                <div class="form-group">
                    <label>Rep Password</label><input type="password" class="form-control" name="models[0].Password" />
                </div>
                <div class="form-group">
                    <label>Confirm Password</label><input type="password" class="form-control" name="models[0].ConfirmPassword" />
                </div>
            </div>
        </div>
    }
</div>
<script src="https://code.jquery.com/jquery.js"></script>
<script type="text/javascript">

    var selectValues = {
        "Johannesburg": "Johannesburg",
        "Pretoria": "Pretoria",
        "Cape Town": "Cape Town",
        "Pretoria": "Pretoria",
        "Durban": "Durban",
        "Centurion": "Centurion"
    };

    $.each(selectValues, function (key, value) {
        $('select')
             .append($('<option>', { value: key })
             .text(value))
             .prop("selectedIndex", -1);
    });

    var i = 1;
    $("#add").click(function () {
        var inputfield = '<div class="col-lg-4" id="' + container + i + '" style="background-color: #eee; border: 4px solid white;"><h4 style="text-align: center">New Rep</h4><div class="form-group"><label>Representative Name</label><input type="text" class="form-control" name="models[' + i + '].RepName" /></div>' +
           '<div class="form-group"><label>Contact Number</label><input type="text" class="form-control" name="models[' + i + '].ContactNumber" /></div>' +
                '<div class="form-group"><label>Rep Username</label><input type="text" class="form-control" name="models[' + i + '].UserName" /></div>' +
                    '<div class="form-group"><label>Location</label><select id="select-' + i + '" class="form-control" name="models[' + i + '].Location"></select></div>' +
                        '<div class="form-group"><label>Rep Password</label><input type="password" class="form-control" name="models[' + i + '].Password" /></div>' +
                            '<div class="form-group"><label>Confirm Password</label><input type="password" class="form-control" name="models[' + i + '].ConfirmPassword"/></div></div>'
        $('#fieldform').append(inputfield)

        $.each(selectValues, function (key, value) {
            $('#select-' + i)
                 .append($('<option>', { value: key })
                 .text(value))
                 .prop("selectedIndex", -1);
        });
        i++
    });

</script>

我知道我必须向用户名输入字段添加验证属性,但我试过了,但它仍然不起作用。有任何想法吗?

4

1 回答 1

0

您可以使用 Validator 类在您的控制器中进行验证(当发送 ajax 请求时)。此类允许您调用 Validator.TryValidateObject 来验证模型的数据注释,例如 [Required]。

然后,一旦通过/失败返回构造的 json 数据以及成功/错误消息。

这是真正帮助我的文章:

http://odetocode.com/blogs/scott/archive/2011/06/29/manual-validation-with-data-annotations.aspx

于 2014-04-08T07:56:46.417 回答