【问题标题】:Validations getting hidden验证被隐藏
【发布时间】:2015-07-29 04:03:58
【问题描述】:

我有这个 Asp.Net 网络表单代码:

 <div class="content-wrapper">
            <asp:Panel runat="server">
                <asp:TextBox runat="server" ID="txt1" />
                <asp:RequiredFieldValidator runat="server" ValidationGroup="fgEm1" ControlToValidate="txt1" ErrorMessage="Required" />
                <asp:Button runat="server" Text="Confirm my email" ValidationGroup="fgEm1" CssClass="btn btn-success" ID="btnConfirm1" />
            </asp:Panel>

            <asp:Panel runat="server">
                <asp:TextBox runat="server" ID="txt2" />
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ValidationGroup="fgEm2" runat="server" ControlToValidate="txt2" ErrorMessage="Required" />
                <asp:Button runat="server" Text="Confirm my email" ValidationGroup="fgEm2" CssClass="btn btn-success" ID="btnConfirm2" />
            </asp:Panel>
        </div>

当我点击第一个按钮时,我需要这很好。现在,当我单击第二个按钮时,我看到第二个文本框旁边是必需的,但第一个被隐藏了。我不要那个。我希望第一个保持原样。

有什么办法可以做到吗?

【问题讨论】:

  • 首先,您有两个验证组。这意味着您已经告诉它的行为与它完全一样。最简单的方法是为 txt1 添加第二个必填字段验证器,但使用验证组 fgEm2。这样它会验证第一个按钮,然后第二个按钮将验证 txt2 和 txt1。
  • @Mark:您正在完全改变验证组的工作方式。我想要的其实很简单。由于它是两个验证组,因此另一个组应该独立​​于第一个组,因此如果我们在第一个组上有验证消息,它应该在单击第二组的按钮时保持原样。

标签: asp.net .net webforms


【解决方案1】:

当单击 btnConfirm2 时,仅验证属​​于 fgEm2 的验证控件,同样单击 btnConfirm1 时,仅验证属​​于 fgEm1 的验证控件。 如果您想一次验证这两个控件,那么您必须强制它们检查您云使用 javascript 的所有验证控件,或者在按钮中单击检查两个验证:

Javascript:

 function fnJSOnFormSubmit() {
        var isGrpOneValid = Page_ClientValidate("fgEm1");
        var isGrpTwoValid = Page_ClientValidate("fgEm2");
if (isGrpOneValid && isGrpTwoValid)
            return true; //postback only when BOTH validations pass.
        else
            return false;
    }

并在clientclick事件上调用此函数。

按钮点击事件:

protected void Button_Click(object sender, EventArgs e)
  { 
    switch (((Button)sender).ID)
    {
      case "btnConfirm1":
        if (RequiredFieldValidator1.IsValid)//RequiredFieldValidator1 is the ID of first validator 
        {
          // write your code
        }
        else
        {
          //Write your code.
        }
        break;
      case "btnConfirm2 ":
        if (RequiredFieldValidator2.IsValid && RequiredFieldValidator1.IsValid)// RequiredFieldValidator2 is the ID of second validator 
        {
          //do your code
        }
        else
        {
         //do your code
        }
        break;
      default:
      //do your code
      break;

    }
  }

这组代码也帮你搞定

     var i;
            for (i = 0; i < Page_Validators.length; i++) { 
                ValidatorValidate(Page_Validators[i]); //this forces validation in all groups
            }
 // use this inside javascript function or in buttonclick event

此链接将为您提供更多帮助: https://msdn.microsoft.com/en-us/library/0ke7bxeh(v=vs.110).aspx

【讨论】:

    【解决方案2】:

    @Jack 我根本不会改变验证组的工作方式。验证组是一组验证器,而不是控件。您可以做的最简单的事情就是这个小改动:

    <div class="content-wrapper">
            <asp:Panel runat="server">
                <asp:TextBox runat="server" ID="txt1" />
                <asp:RequiredFieldValidator runat="server" ValidationGroup="fgEm1" ControlToValidate="txt1" ErrorMessage="Required" display="dynamic" />
    

            <asp:Panel runat="server">
                <asp:TextBox runat="server" ID="txt2" />
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ValidationGroup="fgEm2" runat="server" ControlToValidate="txt2" ErrorMessage="Required" />
                <asp:Button runat="server" Text="Confirm my email" ValidationGroup="fgEm2" CssClass="btn btn-success" ID="btnConfirm2" />
            </asp:Panel>
        </div>
    

    通过动态显示设置,验证器可以轻松换出。当第一个按钮不在第二个按钮的组中时保持第一个可见违反了验证组的工作方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2012-10-30
      相关资源
      最近更新 更多