Измените класс CSS текстового поля, когда Проверка ASP.NET перестанет работать

Можно использовать LINQ, чтобы преобразовать набор в массив и затем вызвать Array. ForEach ():

Array.ForEach(MyCollection.ToArray(), item=>item.DoSomeStuff());

, Очевидно, это не будет работать с наборами структур или встроенных типов как целые числа или строки.

21
задан Travis Collins 12 November 2009 в 02:36
поделиться

3 ответа

Вот быстрая и грязная штука (но она работает!)

<form id="form1" runat="server">
      <asp:TextBox ID="txtOne" runat="server" />
      <asp:RequiredFieldValidator ID="rfv" runat="server" 
                                 ControlToValidate="txtOne" Text="SomeText 1" />
      <asp:TextBox ID="txtTwo" runat="server" />
      <asp:RequiredFieldValidator ID="rfv2" runat="server" 
                                 ControlToValidate="txtTwo" Text="SomeText 2" />
      <asp:Button ID="btnOne" runat="server" OnClientClick="return BtnClick();" 
                                         Text="Click" CausesValidation="true" />
    </form>
    <script type="text/javascript">
        function BtnClick() {
            //var v1 = "#<%= rfv.ClientID %>";
            //var v2 = "#<%= rfv2.ClientID %>";
            var val = Page_ClientValidate();
            if (!val) {
                var i = 0;
                for (; i < Page_Validators.length; i++) {
                    if (!Page_Validators[i].isvalid) {
                        $("#" + Page_Validators[i].controltovalidate)
                         .css("background-color", "red");
                    }
                }
            }            
            return val;
        }
    </script>
25
ответ дан 29 November 2019 в 20:21
поделиться

Я думаю, вы захотите использовать Custom Validator , а затем использовать ClientValidationFunction ... Если только он не добавит класс css в случае сбоя.

2
ответ дан 29 November 2019 в 20:21
поделиться

В качестве альтернативы просто выполните итерацию по элементам управления страницы следующим образом: (необходима ссылка на System.Collections.Generic)

const string CSSCLASS = " error";    

protected static Control FindControlIterative(Control root, string id)
{
   Control ctl = root;
   LinkedList<Control> ctls = new LinkedList<Control>();
   while ( ctl != null )
   {
     if ( ctl.ID == id ) return ctl;
     foreach ( Control child in ctl.Controls )
     {
       if ( child.ID == id ) return child;
       if ( child.HasControls() ) ctls.AddLast(child);
     }
     ctl = ctls.First.Value;
     ctls.Remove(ctl);
   }
   return null;
}



protected void Page_PreRender(object sender, EventArgs e)
{
  //Add css classes to invalid items
  if ( Page.IsPostBack && !Page.IsValid )
  {
    foreach ( BaseValidator item in Page.Validators )
    {
       var ctrltoVal = (WebControl)FindControlIterative(Page.Form, item.ControlToValidate);
       if ( !item.IsValid ) ctrltoVal.CssClass += " N";
       else ctrltoVal.CssClass.Replace(" N", "");
    }
  }
}

Должно работать в большинстве случаев и означает, что вам не нужно обновите его при добавлении валидаторов. Я добавил этот код в cstom Pageclass, чтобы он работал на всем сайте на любой странице, на которую я добавил валидаторы.

-2
ответ дан 29 November 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: