【问题标题】:Multiple Form Validation in Asp.net MVC using Jquery.valid()使用 Jquery.valid() 在 Asp.net MVC 中进行多表单验证
【发布时间】:2014-12-11 08:10:30
【问题描述】:

这是我的场景,我有 3 个手风琴布局。每个手风琴包含 1 种形式。就这样

<div id="collapseOne">

@using(Html.BeginForm("","",FormMethod.Post,new{id="formOne"}))
{

    @Html.TextBoxFor(m=>m.Name)
    @Html.ValidationMessageFor(m=>m.Name)

    @Html.TextBoxFor(m=>m.City)
    @Html.ValidationMessageFor(m=>m.City)

    <input type="button" value="Next" id="btnOne" />

}

</div>
<div id="collapseTwo">


@using(Html.BeginForm("","",FormMethod.Post,new{id="formTwo"}))
{

    @Html.TextBoxFor(m=>m.Age)
    @Html.ValidationMessageFor(m=>m.Age)

    @Html.TextBoxFor(m=>m.Address)
    @Html.ValidationMessageFor(m=>m.Address)

    <input type="button" value="Next" id="btnTwo" />

}

</div>
<div id="collapseThree">

@using(Html.BeginForm("MyAction","MyController",FormMethod.Post,new{id="formThree"}))
{

     @Html.TextBoxFor(m=>m.Email)
     @Html.ValidationMessageFor(m=>m.Email)

     @Html.TextBoxFor(m=>m.City)
     @Html.ValidationMessageFor(m=>m.Email)

    <input type="submit" value="Finish" id="btnThree" />

}

</div>

现在,当我在上面的手风琴中按 Next Next 时,验证检查做得很好。 但是当有人直接来到 3rd 手风琴并尝试按完成时,它只验证 3rd 形式。 这是我的jQuery

function PageEvents(){
  $("#btnThree").click(function(event){
    event.preventDefault();
    if($("#formOne").valid()==false){
      // Open first Accordion
    }
    else if($("#formTwo").valid()==false){
      //Open second Accodion
    }
    else{
      if($("#formThree").valid()){
         $("#formThree").submit();
      }
    }
  });

$("#btnOne").click(function (event) {
    event.preventDefault();
    if ($("#formOne").valid()) {
        //trigger accordion two
        $("collapseTwo").trigger("click");
    }
});
$("#btnTwo").click(function (event) {
    event.preventDefault();
    if ($("#formTwo").valid()) {
        //trigger accordion two
        $("collapseThree").trigger("click");
    }
});

如果您需要更多描述,我会提供。 请指导我如何验证那些尚未打开的表单,用户直接进入 3rd 手风琴并按下完成按钮...

谢谢

【问题讨论】:

  • 您是否正在尝试执行多步骤向导?
  • btnOne 和 btnTwo 上的 jquery 代码是什么?
  • 正是@StephenMuecke,但实际上它不是巫师,而是像巫师一样行事。
  • @teovankot 我更新了我的问题,请看一下
  • @azhar_SE_nextbridge。 This answer 显示了一个使用单个表单并动态验证每个部分的替代方案。我不知道你怎么能做到这一点。您使用相同的方法发布您的回复,因此如果您发布第一种形式 - 它会导致服务器端验证失败(例如,如果说需要电子邮件)

标签: javascript jquery asp.net asp.net-mvc validation


【解决方案1】:

你有验证隐藏字段的问题,jquery验证默认不验证隐藏字段,你可以改变默认:

$.validator.setDefaults({
    ignore: []
});

购买也可以禁用标签,这是不允许的here 示例如何做到这一点。

但最好的方法是使用像 this 这样的 miltistep 向导。

【讨论】:

  • 但在这种情况下,当我点击 btnThree 时,它​​会返回所有有效的表单,即使它们还无效..
  • 当整个 div 被隐藏时,显然它会针对验证返回 true。
  • 现在我得到了你的问题,用解决方案更新了答案
  • 如果某些控件是基于决策的,例如如果选择了下拉值,则显示 Age 文本框。到那时它应该默认隐藏。通过您的解决方案,它会验证所有字段。
  • 是的,你说得对。那么禁用用户无法通过您的逻辑使用的选项卡可能会更容易?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多