当页面类属性IsValid
是只读时,如何使用我自己的验证方法设置它?
到目前为止,我所能做的就是通过调用Page.Validate()
来设置此属性。
如何编写自己的功能,以便像IsValid
一样更改Page.Validate()
属性?
答案 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
属性是只读的,因为它旨在用于服务器和客户端验证器,如RequiredFieldValidator
和RegularExpressionValidator
。它是只读的,因为您无法以编程方式强制页面有效。在此上下文中,“有效”表示页面上的所有验证器都评估为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;
}