Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何使用MVC';在剑道UI上的远程验证';什么是数字文本框?_Asp.net Mvc_Validation_Asp.net Mvc 4_Kendo Ui_Kendo Asp.net Mvc - Fatal编程技术网

Asp.net mvc 如何使用MVC';在剑道UI上的远程验证';什么是数字文本框?

Asp.net mvc 如何使用MVC';在剑道UI上的远程验证';什么是数字文本框?,asp.net-mvc,validation,asp.net-mvc-4,kendo-ui,kendo-asp.net-mvc,Asp.net Mvc,Validation,Asp.net Mvc 4,Kendo Ui,Kendo Asp.net Mvc,我遇到了一点麻烦:我有一个页面,其中有一个整数值,应该针对数据库的重复性进行验证,使用MVC的内置TextBoxFor可以很好地工作,但是当我将其更改为Kendo的NumericTextBox以更好地进行输入验证和总体用户友好性时,远程方法永远不会被调用 基本上: [Remote("ValidateDuplicity", "Edital", AdditionalFields = "Year, Id", ErrorMessage = "Code already used")]

我遇到了一点麻烦:我有一个页面,其中有一个整数值,应该针对数据库的重复性进行验证,使用MVC的内置TextBoxFor可以很好地工作,但是当我将其更改为Kendo的NumericTextBox以更好地进行输入验证和总体用户友好性时,远程方法永远不会被调用

基本上:

    [Remote("ValidateDuplicity", "Edital", AdditionalFields = "Year, Id", ErrorMessage = "Code already used")]        
    public int Code { get; set; }
如果在视图中我使用以下内容,则一切正常:

    @Html.TextBoxFor(x => x.Code, new { @class = "k-textbox lt-width-full" })
    @Html.ValidationMessageFor(x => x.Code)
但在下一种情况下,验证从未触发:

    @Html.Kendo().NumericTextBoxFor(x => x.Code)
    @Html.ValidationMessageFor(x => x.Code)
有没有关于我可能遗漏什么的想法

编辑:

如所问,呈现的Html如下所示:

<span class="k-numeric-wrap k-state-default">
  <input type="text" class="k-formatted-value k-input" tabindex="0" aria-disabled="false" aria-readonly="false" style="display: inline-block;">
  <input data-val="true" data-val-number="The field Numero must be a number." data-val-regex="Número inválido" data-val-regex-pattern="^([0-9]+)$" data-val-remote="Edital já cadastrado" data-val-remote-additionalfields="*.Numero,*.Ano,*.Id" data-val-remote-url="/SAGI/DNIT/Edital/ValidadeDuplicidadeEdital" data-val-required="Campo requerido" id="Numero" name="Numero" type="text" value="457" data-role="numerictextbox" role="spinbutton" class="k-input" aria-valuenow="457" aria-disabled="false" aria-readonly="false" style="display: none;">
  <span class="k-select">
    <span unselectable="on" class="k-link">
      <span unselectable="on" class="k-icon k-i-arrow-n" title="Increase value">
        Increase value
      </span>
    </span>
    <span unselectable="on" class="k-link">
      <span unselectable="on" class="k-icon k-i-arrow-s" title="Decrease value">
        Decrease value
      </span>
    </span>
  </span>
</span>
<input class="k-textbox lt-width-full" data-val="true" data-val-number="The field Numero must be a number." data-val-regex="Número inválido" data-val-regex-pattern="^([0-9]+)$" data-val-remote="Edital já cadastrado" data-val-remote-additionalfields="*.Numero,*.Ano,*.Id" data-val-remote-url="/SAGI/DNIT/Edital/ValidadeDuplicidadeEdital" data-val-required="Campo requerido" id="Numero" name="Numero" type="text" value="457">

增值
递减值
编辑2

然而,当对生成的Html使用TextBox时,如下所示:

<span class="k-numeric-wrap k-state-default">
  <input type="text" class="k-formatted-value k-input" tabindex="0" aria-disabled="false" aria-readonly="false" style="display: inline-block;">
  <input data-val="true" data-val-number="The field Numero must be a number." data-val-regex="Número inválido" data-val-regex-pattern="^([0-9]+)$" data-val-remote="Edital já cadastrado" data-val-remote-additionalfields="*.Numero,*.Ano,*.Id" data-val-remote-url="/SAGI/DNIT/Edital/ValidadeDuplicidadeEdital" data-val-required="Campo requerido" id="Numero" name="Numero" type="text" value="457" data-role="numerictextbox" role="spinbutton" class="k-input" aria-valuenow="457" aria-disabled="false" aria-readonly="false" style="display: none;">
  <span class="k-select">
    <span unselectable="on" class="k-link">
      <span unselectable="on" class="k-icon k-i-arrow-n" title="Increase value">
        Increase value
      </span>
    </span>
    <span unselectable="on" class="k-link">
      <span unselectable="on" class="k-icon k-i-arrow-s" title="Decrease value">
        Decrease value
      </span>
    </span>
  </span>
</span>
<input class="k-textbox lt-width-full" data-val="true" data-val-number="The field Numero must be a number." data-val-regex="Número inválido" data-val-regex-pattern="^([0-9]+)$" data-val-remote="Edital já cadastrado" data-val-remote-additionalfields="*.Numero,*.Ano,*.Id" data-val-remote-url="/SAGI/DNIT/Edital/ValidadeDuplicidadeEdital" data-val-required="Campo requerido" id="Numero" name="Numero" type="text" value="457">


默认情况下,Jquery验证不适用于隐藏字段。因此,您必须将这段代码放在jquery验证JS引用之后

 $.validator.setDefaults({
        ignore: ""
    });

首先我们需要禁用jQuery验证器的
remote
方法,然后通过为
kendoValidator
定义一个新的远程规则并使其
async:false
,就可以在KendoUI中使用
数据val远程url
和ASP.NET MVC的其他属性

$.validator.methods.remote = function () { /* disabled */ };
$("form").kendoValidator({
    onfocusout: true,
    onkeyup: true,
    rules: {
        remote: function (input) {
            var remoteAttr = input.attr("data-val-remote-url");
            if (typeof remoteAttr === typeof undefined || remoteAttr === false) {
                return true;
            }

            var isInvalid = true;
            var data = {};
            data[input.attr('name')] = input.val();

            $.ajax({
                url: remoteAttr,
                mode: "abort",
                port: "validate" + input.attr('name'),
                dataType: "json",
                type: input.attr("data-val-remote-type"),
                data: data,
                async: false,
                success: function (response) {
                    isInvalid = response;
                }
            });
            return !isInvalid;
        }
    },
    messages: {
        remote: function (input) {
            return input.data('val-remote');
        }
    }
});

当你使用剑道数字文本框时,最终呈现的html是什么样子?@ataravati它现在就在那里。看起来还可以。你能显示标准文本框的生成代码吗?比较可能会发现一个重要的区别。剑道对象大量使用Javascript。可能是用于处理远程验证的内置MVC Javascript无法正确访问该值。剑道文档在这里:您可能需要使用jQuery进行自己的AJAX调用,并使用剑道API访问值。