使用AJAX无法显示验证错误

时间:2014-08-02 14:00:58

标签: javascript ajax devexpress

我现在已经为此困难了两天,我不知道问题出在哪里。

当我离开文本框时,Ajax调用是正确的,结果将返回true或false,并且success:function正在执行。

问题是图像和错误文本没有显示在文本框旁边。如果我在文本框中输入超过50个字符,则显示“必须小于50个字符”消息但是我输入的消息未显示的用户名已经存在。

我错过了什么?有什么建议吗?

我使用的是DevExpress文本框

Html.DevExpress().Label(
        edtSettings =>
        {
            edtSettings.ControlStyle.CssClass = "label";
            edtSettings.Text = "User Name:";
            edtSettings.AssociatedControlName = "UserName";
        }
    )
    .Render();
    Html.DevExpress().TextBox(
        edtSettings =>
        {
            edtSettings.Name = "UserName";
            edtSettings.ControlStyle.CssClass = "editor";
            edtSettings.ShowModelErrors = true;
            edtSettings.Width = 100;
            edtSettings.Properties.ValidationSettings.Assign(IserValidationHelper.UserNameValidationSettings);
            edtSettings.Properties.ClientSideEvents.Validation = "OnNameValidation";
            edtSettings.ControlStyle.BackColor = System.Drawing.Color.LightYellow;
        }
        )
        .Bind(DataBinder.Eval(IserUser, "UserName"))
        .Render();

我有以下JavaScript。

<script type="text/javascript">

function OnNameValidation(s, e) {

    if (e.value == null)
        e.isValid = false;

    $.ajax({
        type: 'POST',
        url: '/Admin/CheckUsername',
        dataType: 'json',
        data: { userName: e.value },
        error: function () { alert("error"); },
        success: function (Data) {
            if (Data.result == true) {
                e.isValid = false;
                e.errorText = "User Exits";
            };
        }
    });

    var name = e.value;
    if (name == "")
        e.isValid = false;

    if (name.length > 50) {
        e.isValid = false;
        e.errorText = "Must be under 50 characters";
    }

}

我的控制器中有以下方法。

[HttpPost]
    public ActionResult CheckUsername(string userName)
    {
        bool status = WebSecurity.UserExists(userName);
        return Json(new { result = status });
    }

JSON Result

JSON Result 2

1 个答案:

答案 0 :(得分:1)

问题出在我的$ .ajax电话上。我必须包含 async async:false,)设置,因为默认的async为true。它现在正常工作。

function OnNameValidation(s, e) {

    if (e.value == null)
        e.isValid = false;

    $.ajax({
        type: 'POST',
        url: '/ISERAdmin/CheckUsername',
        dataType: 'json',
        async:false,
        data: { userName: e.value },
        error: function () { alert("error"); },
        success: function (Data) {
            if (Data.result == true) {
                e.isValid = false;
                e.errorText = "User Exits";
            };
        }
    });

    var name = e.value;
    if (name == "")
        e.isValid = false;

    if (name.length > 56) {
        e.isValid = false;
        e.errorText = "Must be under 56 characters";
    }

}