如何在ASP.Net中设置Page.IsValid

时间:2009-06-22 02:25:56

标签: asp.net validation

当页面类属性IsValid是只读时,如何使用我自己的验证方法设置它?

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

如何编写自己的功能,以便像IsValid一样更改Page.Validate()属性?

5 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:3)

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

将此添加到.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);

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

答案 2 :(得分:2)

IsValid属性是只读的,因为它旨在用于服务器和客户端验证器,如RequiredFieldValidatorRegularExpressionValidator。它是只读的,因为您无法以编程方式强制页面有效。在此上下文中,“有效”表示页面上的所有验证器都评估为true。

答案 3 :(得分:1)

如果您想使用某些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. ( * )");
    }

(一开始我以为'谁会提交一份没有数据的表格'但是很快就会发现它发生了)

答案 4 :(得分:1)

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

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;
}