首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持远程验证的KendoValidation

支持远程验证的KendoValidation
EN

Stack Overflow用户
提问于 2019-05-04 15:53:05
回答 1查看 526关注 0票数 1

这几乎要了我的命。我从来没有在一个问题上浪费过这么多时间。我有一个字段需要通过调用REST API进行验证,因为它需要检查数据库中是否存在某些数据。我遇到的问题是,即使对json api的调用返回false,调用validator.validate也会返回true。

下面是代码(我使用了Kendo MVC帮助器,但它与问题无关)

代码语言:javascript
复制
<div id="divValidator1">
<div class="form-group">
    @Html.LabelFor(m => m.Email)
    @(Html.Kendo().TextBoxFor(m => m.Email)
          .HtmlAttributes(new { placeholder = "you@domain.com", type = "email", @class = "k-textbox required",data_bind="value: XXX" })
    )
</div>

<footer class="col-xs-12 form-group text-right">
    @(Html.Kendo().Button()
          .Name("Next1")
          .Content("Next")
          .HtmlAttributes(new { @class = "k-primary", data_bind = "enabled: isEnabled" })
          .Events(ev => ev.Click("onNextClick")))
</footer>

代码语言:javascript
复制
var kendoValid = $("#divValidator1").kendoValidator({
    validateOnBlur: false,
     rules: {
            remote: function (input) {
                if (input.val() == "" || !input.attr("data-val-remote-url")) {
                    return true;
                }

                if (input.attr("data-val-remote-recieved")) {
                    input.attr("data-val-remote-recieved", "");
                    return !(input.attr("data-val-remote"));
                }

                var url = input.attr("data-val-remote-url");
                var postData = {};
                postData[input.attr("data-val-remote-additionalfields").split(".")[1]] = input.val();

                var validator = this;
                var currentInput = input;
                input.attr("data-val-remote-requested", true);
                $.ajax({
                    url: url,
                    type: "POST",
                    data: JSON.stringify(postData),
                    dataType: "json",
                    traditional: true,
                    async:false,
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {

                        if (data == true) {
                            input.attr("data-val-remote", "");
                        }
                        else {
                            input.attr("data-val-remote", false);
                        }
                        input.attr("data-val-remote-recieved", true);
                     //   validator.validateInput(currentInput);


                    },
                    error: function () {
                        input.attr("data-val-remote-recieved", true);
                        validator.validateInput(currentInput);
                    }
                });
                return true;
            }
        },
        messages: {
            remote: function (input) {
                return input.attr("data-val-remote");
            }
        }
}).data("kendoValidator");

var viewModel1 = kendo.observable({
    XXX:null,
        isEnabled: function () {

            var self = this;

            self.get("XXX");

            var x = $("#divValidator1").data("kendoValidator");

            console.log(x.validate());
        }
    });

    kendo.bind($("#divValidator1"), viewModel1);

这是控制器

代码语言:javascript
复制
public ActionResult IsEmailJustPresent(string email)
    {
        var res = email == "something";

        return Json(res, JsonRequestBehavior.AllowGet);
    }

和ViewModel

代码语言:javascript
复制
 public class RegisterViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    [Remote("IsEmailJustPresent", "Home")]
    public string Email { get; set; }
}

我还使用了一个kendo.observable,这样就可以根据验证值启用/禁用next按钮。

在isEnabled函数中,您可以看到I do var x= $("#divValidator1").data("kendoValidator");但它返回的总是true (似乎只检查所需的属性)。

为了实现这个解决方案,我从here开始

如果您愿意,我在git上创建了一个更复杂的示例,其中包含了我在最终项目中需要的向导

EN

回答 1

Stack Overflow用户

发布于 2019-05-09 22:43:24

这行注释可能是问题所在吗?

代码语言:javascript
复制
//   validator.validateInput(currentInput);

属性"data-val-remote“是否设置正确?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55980614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档