-1

私のHtmlコードとJavascriptコードは次のとおりです。

<h2>Register</h2>

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)

    <fieldset class="acloginform">
        <legend>Register User</legend>

        <ol>
            <li>
                <div class="editor-label">
                    @Html.LabelFor(model => model.Email_Id)
                </div>
                <div class="editor-field">
                    @Html.TextBoxFor(model => model.Email_Id, new { @id = "txt_EmailId" })
                    @Html.ValidationMessageFor(model => model.Email_Id)
                </div>
            </li>
            <li>
                <div class="editor-label">
                    @Html.LabelFor(model => model.FirstName)
                </div>
                <div class="editor-field">
                    @Html.TextBoxFor(model => model.FirstName)
                    @Html.ValidationMessageFor(model => model.FirstName)
                </div>
            </li>
            <li>
                <div class="editor-label">
                    @Html.LabelFor(model => model.LastName)
                </div>
                <div class="editor-field">
                    @Html.TextBoxFor(model => model.LastName)
                    @Html.ValidationMessageFor(model => model.LastName)
                </div>
            </li>
            <li>
                <div class="editor-label">
                    @Html.LabelFor(model => model.Password)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.Password)
                    @Html.ValidationMessageFor(model => model.Password)
                </div>
            </li>
            <li>
                <div class="editor-label">
                    @Html.LabelFor(model => model.ConfirmPassword)
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.ConfirmPassword)
                    @Html.ValidationMessageFor(model => model.ConfirmPassword)
                </div>
            </li>
            <li>
                <input type="submit" value="Register" />
                @Html.ActionLink("Back to Home Page", "Index", new { Controller = "Home" }, new { @class = "regislnk" })
            </li>
        </ol>
    </fieldset>
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

<script type="text/javascript">  

    $(document).ready(function () {        

        jQuery.validator.addMethod("Duplicate_EmailId", function (value) {
            $.ajax({
                url: '/User/CheckEmailId?EmailId=' + value,
                async: false,
                success: function (data) {
                    alert(data);
                    if (data == true)
                        return false;
                    else
                        return true;
                },
            });          


        }, "Email Id already Exists");

        $('#txt_EmailId').addClass('Duplicate_EmailId');    
    });

</script>

ユーザーコントローラーの下の私のC#メソッドは

public JsonResult CheckEmailId(string EmailId)
{
    var res = my method;
    return Json(res, JsonRequestBehavior.AllowGet);
}

ここでは、結果の成功/失敗ごとにエラー メッセージが表示されます。そしてメソッドが呼び出しています

二度。テキストボックスのぼかしとフォームの送信について。

4

1 に答える 1

0

当面の問題は、検証メソッドから何も返さないことです。つまり、false を返すようなものです。

jQuery.validator.addMethod("Duplicate_EmailId", function (value) {

    // returning nothing here, means validation fails

}, "Email Id already Exists");

ajaxメソッドからtrue/falseを返していますが、検証メソッドからではありません。このようなものが必要です

jQuery.validator.addMethod("Duplicate_EmailId", function (value) {

    var validationResult = false;

    $.ajax({
        url: '/test/CheckEmailId?EmailId=' + value,
        async: false,
        success: function (data) {
            console.log(data);
            if (data == true)
                validationResult = false;
            else
                validationResult = true;
        },
    });

    return validationResult;

}, "Email Id already Exists");

しかし、このように async を false に設定することは、ajax 呼び出しが行われている間、ユーザーが他のフィールドに入力できなくなるため、理想的ではないと思います。リモートメソッドの実装にはいくつかの巧妙な機能が組み込まれているため、非同期にすることができます。使用できる場合は、プラグインのリモート メソッドを使用します。

于 2013-04-09T10:48:10.517 に答える