基于验证更改控件的样式(ASP.NET)

时间:2009-09-10 12:46:44

标签: c# asp.net

我有一个非常简单的表单,其中包含以下问题摘录:

<asp:Panel class="normal" ID="Panel1" runat="server">
 <strong><asp:Label ID="Panel1Error" class="error" Visible="false" runat="server"/></strong>

 <label for="TextBox1"><em>*</em> Don't leave this blank</label>
 <asp:TextBox ID="TextBox1" runat="server" />

 <asp:RequiredFieldValidator ID="TextBox1RFV" runat="server"
  ControlToValidate="TextBox1" ErrorMessage="This field cannot be blank."
  Display="None" />

    <--- other validators --->
</asp:Panel>

当页面验证失败时,我想做两件事:

  1. 更改Panel1的样式(显示不同颜色的样式以指示错误)。我能够通过在Page_Load中调用Page.Validate,然后遍历Page.Validators,获取每个验证器的父控件,将其转换为Panel,然后设置.CssClass看起来不是一个极好的解决方案,但它得到了完成工作 - 有更好的方法吗?

  2. 我想接受任何抛出的验证错误并将它们放在Panel1Error标签中,并将其设置为可见。这是我有点困惑的地方。我一开始以为我可能会指定一个验证器写入其ErrorMessage的Label,但我没有这样的运气。如果我只是在Label中抛出验证器,它的格式会弄乱页面的整个布局,无论我是直接将它分配给'错误'CSS类还是只留在标签中。

  3. 为了澄清一点,在制作中,我会在一个页面上为多个Panel执行此过程,每个Panel都有一个表单元素,阻止我明确调用Panels,只是说Panel1.CssClass等。

2 个答案:

答案 0 :(得分:1)

  1. 我会推荐一个javascript解决方案。 ASP.NET注入一个名为Page_Validators的全局js变量,该变量是页面上所有验证器跨度的数组。我在my blog上写了这篇文章。这是一个不同的解决方案,但它应该给你足够的洞察力来开始。
  2. 使用ValidationSummary控件,每个面板都有一个ValidationGroup

答案 1 :(得分:0)

  1. 如果有效,似乎很好。

  2. 使用ValidationSummary控件。或者您可以从控件继承并覆盖渲染事件。