远程操作方法不是使用jQuery验证命中 [英] Remote action method not being hit using jQuery Validate

查看:106
本文介绍了远程操作方法不是使用jQuery验证命中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 ASP.NET MVC4 JQuery验证 JQuery验证不显眼

我有我的表格上的各种元素,但我只需要有一个元素验证。其他元素的不要需要验证。基本上发生的事情是我必须能够接受数字的文本框和一个按钮(不会提交的形式),才能在这个texbox数量和做一个远程调用,检查数量是否存在,如果不那么它必须显示一个错误消息。

我的观点的code:

 < TD类=编辑标记>变更控制ID /事件编号:LT;跨度类=必需> **< / SPAN>< / TD>
&所述; TD>
     @ Html.TextBoxFor(X => x.ChangeIncidentNumber)
     <按钮ID =verifyButton类型=按钮>验证并LT; /按钮>
     @ Html.ValidationMessageFor(X => x.ChangeIncidentNumber)
< / TD>

我的视图模型:

 公共类SearchServerViewModel
{
     //局部视图模型     公共字符串ChangeIncidentNumber {搞定;组; }
}

我的HTML输出文本框:

 < TD类=编辑标记>变更控制ID /事件编号:LT;跨度类=必需> **< / SPAN>< / TD>
&所述; TD>
     <输入数据-VAL =真正的数据-VAL-所需=必需ID =ChangeIncidentNumberNAME =ChangeIncidentNumber类型=文本VALUE =792952/>
     <按钮ID =verifyButton类型=按钮>验证并LT; /按钮>
     <跨度类=现场验证,有效的数据valmsg换=ChangeIncidentNumber数据valmsg替换=真正的>< / SPAN>
< / TD>

我的jQuery的code:

 <脚本的src =/资产/ Java脚本/ jQuery的-验证/ jquery.validate.min.js>< / SCRIPT>
<脚本的src =/资产/ Java脚本/ jQuery的-验证/ jquery.validate.unobtrusive.min.js>< / SCRIPT><脚本>     $(文件)。就绪(函数(){
          $(#ChangeIncidentNumber)。验证({
               规则{
                    ChangeIncidentNumber:{
                         要求:真实,
                         遥控器:'/服务器/ ValidateChangeIncidentNumber
                    }
                },
                消息:{
                     ChangeIncidentNumber:{
                          要求:要求,
                          遥控器:自定义消息:
                     }
                }
          });          $('#verifyButton')。点击(函数(){
               VAR的isValid = $('#ChangeIncidentNumber')有效的()。
          });
     });< / SCRIPT>

我的操作方法:

 公众的ActionResult ValidateChangeIncidentNumber(字符串ChangeIncidentNumber)
{
     //做任何需要做的事情     返回JSON(测试错误文本,JsonRequestBehavior.AllowGet);
}

在我的web.config:

 <添加键=ClientValidationEnabledVALUE =真/>
<添加键=UnobtrusiveJavaScriptEnabledVALUE =真/>

所需的部分工作,如果文本框为空,它会显示所需的消息。但是如果它不打我的操作方法的值。不知道为什么?


解决方案

  

我有我的形式对各种元素,但我只需要有一个
  元素验证。其他元素不需要被验证


然后设置需要或自定义属性仅所需要被验证的那些字段

HTML

 < D​​IV ID =formContainer
     数据URL =@ Url.Action(操作名称,控制器名称
     新{面积=区域名称})>< / DIV><输入ID =BTN类型=按钮值=按钮/>

JQuery的(下面的请求可以有GET / POST /的getJSON,所以相应地进行更改)

  $('#BTN')。点击(函数(){
    变量$ formContainer = $('#formContainer');
    VAR URL = $ formContainer.attr(数据链接');
    $ formContainer.load(URL,函数(){
        变量$ =形式$('#myForm的');
        $ .validator.unobtrusive.parse($形式);
        $ form.submit(函数(){//此处修改就可以点击布顿
            变量$形式= $(本);
            如果($ form.valid()){
                $。员额(this.action,$(本).serialize(),功能(数据){
                    $ form.html(数据);
                    $ form.removeData('验证');
                    $ form.removeData('unobtrusiveValidation');
                    $ .validator.unobtrusive.parse($形式);
                });
            }
            返回false;
        });
    });
    返回false;
});

I am using ASP.NET MVC4 and jQuery Validate and jQuery Validate unobtrusive.

I have various elements on my form, but I only need to have one element validated. The other elements DO NOT need to be validated. Basically what happens is I have a textbox that accepts a number, and a button (NOT to submit the form) that takes the number in this texbox and does a remote call to check if the number exists, if not then it must display an error message.

My view's code:

<td class="edit-label">Change Control ID/Incident Number: <span class="required">**</span></td>
<td>
     @Html.TextBoxFor(x => x.ChangeIncidentNumber)
     <button id="verifyButton" type="button">Verify</button>
     @Html.ValidationMessageFor(x => x.ChangeIncidentNumber)
</td>

My view model:

public class SearchServerViewModel
{
     // Partial view model

     public string ChangeIncidentNumber { get; set; }
}

My HTML output for the textbox:

<td class="edit-label">Change Control ID/Incident Number: <span class="required">**</span></td>
<td>
     <input data-val="true" data-val-required="Required" id="ChangeIncidentNumber" name="ChangeIncidentNumber" type="text" value="792952" />
     <button id="verifyButton" type="button">Verify</button>
     <span class="field-validation-valid" data-valmsg-for="ChangeIncidentNumber" data-valmsg-replace="true"></span>
</td>

My jQuery code:

<script src="/Assets/JavaScripts/jquery-validate/jquery.validate.min.js"></script>
<script src="/Assets/JavaScripts/jquery-validate/jquery.validate.unobtrusive.min.js"></script>

<script>

     $(document).ready(function () {
          $("#ChangeIncidentNumber").validate({
               rules: {
                    ChangeIncidentNumber: {
                         required: true,
                         remote: '/Server/ValidateChangeIncidentNumber'
                    }
                },
                messages: {
                     ChangeIncidentNumber: {
                          required: "Required",
                          remote: "custom message:"
                     }
                }
          });

          $('#verifyButton').click(function () {
               var isValid = $('#ChangeIncidentNumber').valid();
          });
     });

</script>

My action method:

public ActionResult ValidateChangeIncidentNumber(string ChangeIncidentNumber)
{
     // Do whatever needs to be done

     return Json("Test error text", JsonRequestBehavior.AllowGet);
}

In my web.config:

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

The required part works, it displays the Required message if the textbox is empty. But if there is a value it is not hitting my action method. Not sure why?

解决方案

I have various elements on my form, but I only need to have one element validated. The other elements DO NOT need to be validated

Then set required or custom attribute for only those fields which are required to be validated.

HTML

<div id="formContainer" 
     data-url="@Url.Action("Action Name", "Controller Name", 
     new { area = "Area Name" })"></div>

<input id="BTN" type="button" value="Button" />

JQuery (The below request can have get /post /getJSON. So change it accordingly)

$('#BTN').click(function () {
    var $formContainer = $('#formContainer');
    var url = $formContainer.attr('data-url');
    $formContainer.load(url, function () {
        var $form = $('#myForm');
        $.validator.unobtrusive.parse($form);
        $form.submit(function () { //Here modification can be buton click                
            var $form = $(this);
            if ($form.valid()) {
                $.post(this.action, $(this).serialize(), function (data) {
                    $form.html(data);
                    $form.removeData('validator');
                    $form.removeData('unobtrusiveValidation');
                    $.validator.unobtrusive.parse($form);
                });
            }
            return false;
        });
    });
    return false;
});

这篇关于远程操作方法不是使用jQuery验证命中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆