【问题标题】:How to set Page.IsValid in ASP.Net如何在 ASP.Net 中设置 Page.IsValid
【发布时间】:2009-06-22 02:25:55
【问题描述】:

当页面类属性IsValid为只读时,如何使用自己的验证方式进行设置?

到目前为止,我所能做的就是通过调用 Page.Validate() 来设置此属性。

我如何编写自己的函数来更改IsValid 属性,就像Page.Validate() 一样?

【问题讨论】:

    标签: asp.net validation


    【解决方案1】:

    您不直接设置 IsValid,而是调用 Page 对象的 Validate() 方法。如果您有自定义验证方法,则需要使用 CustomValidator 对象并在其服务器端验证属性中设置该函数。

      <asp:CustomValidator ID="YourValidator" runat="server" SetFocusOnError="true"  
          ControlToValidate="YourControl"
            ClientValidationFunction="YOUR_JAVASCRIPT_FUNCTION" 
            OnServerValidate="YOUR_SERVER_VALIDATION_FUNCTION" Text="*" />
    

    【讨论】:

      【解决方案2】:

      我知道这是旧的,但是,我需要做一些类似的事情,基本上是强制 IsValid 属性为假(不要问为什么)。这就是我基本上所做的(你在这里看到的是我的概念证明):

      将此添加到 .aspx 页面:

      <asp:TextBox ID="txtDummy" runat="server" Visible="false" />
      <asp:RangeValidator ID="rvDummy" ControlToValidate="txtDummy" runat="server" MinimumValue="1" MaximumValue="2" />
      

      然后我在后面的代码中添加了这个:

      bool makeMyPageInvalid = true;
      if (makeMyPageInvalid)
          txtDummy.Text = "0";
      
      Page.Validate();
      
      if (Page.IsValid)
          ScriptManager.RegisterStartupScript(Page, Page.GetType(), "test", "alert('valid');", true);
      else
          ScriptManager.RegisterStartupScript(Page, Page.GetType(), "test", "alert('not valid');", true);
      

      您可以看到,这只允许您将页面验证强制为无效状态。您可以使用任何验证器或理由来设置它。希望这对某人有帮助!

      【讨论】:

        【解决方案3】:

        IsValid 属性是只读的,因为它旨在用于服务器和客户端验证器,例如 RequiredFieldValidatorRegularExpressionValidator。它是只读的,因为您不能以编程方式强制页面有效。在这种情况下,“有效”意味着页面上的所有验证器都评估为 true。

        【讨论】:

          【解决方案4】:

          如果您想使用一些 JavaScript,您可以在客户端通过修改变量 Page_IsValid 来实现,如下所示:

          function pageLoad() {
              Page_IsValid = false;
          }
          

          我使用它以防有人单击提交按钮而没有输入数据。然后我可以显示这样的警报:

          function valid() {
              if (!Page_IsValid) {
                  alert("Some Questions Remain Unanswered and are Marked with a Red Asterisc. ( * )");
              }
          

          (一开始我以为“谁会提交没有数据的表单”,但迟早我意识到它发生了)

          【讨论】:

            【解决方案5】:

            这是一个非常古老的问题,但它是在搜索中出现的,所以我想我会添加我的答案。首先,在您的帮助类中创建一个扩展方法。

            public static IEnumerable<T> GetAllControlsOfType<T>(this Control parent) where T : Control
            {
                var result = new List<T>();
                foreach (Control control in parent.Controls)
                {
                    if (control is T)
                    {
                        result.Add((T)control);
                    }
                    if (control.HasControls())
                    {
                        result.AddRange(control.GetAllControlsOfType<T>());
                    }
                }
                return result;
            }
            

            现在在您的代码隐藏文件中,循环遍历页面上未验证的每个验证器。

            foreach (var validator in Page.GetAllControlsOfType<BaseValidator>().Where(w => !w.IsValid))
            {
                validator.IsValid = true;
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-07-26
              • 1970-01-01
              • 2014-09-02
              • 2011-02-05
              • 1970-01-01
              • 2012-11-25
              • 2016-09-16
              • 2016-07-23
              相关资源
              最近更新 更多