2013-05-07 7 views
0

Я хочу, чтобы при текстовом поле visible = false RequiredFieldValidator не запускался.RequiredFieldValidator IsValid return false on visible = false control

Это мой ASPX код:

<asp:TextBox runat="server" ID="txtAmt" MaxLength="7" Style="width: 100px;"/> 
        <asp:RequiredFieldValidator ValidationGroup="ln" runat="server" ControlToValidate="txtAmt" 
         Display="Dynamic" ErrorMessage="Required" /> 

Сейчас в моем коде позади

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      txtAmt.Visible = false; 
     } 
    } 

и еще в моей кнопки обработчик щелчка, когда я делаю Page.IsValid, она возвращает false, если текстовое поле пусто , Есть идеи, как решить эту проблему?

ответ

3

Просто присвойте идентификатор валидатору и отключите его.

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      txtAmt.Visible = false; 

     if(!txtAmt.visible) { txtamtValidator.Enabled=false}; 

     } 
    } 
+0

Я предполагаю, что это хак, так Page.IsValid должен вернуть истину, если видимость элемента управления является ложной, как в этой ссылке: http://stackoverflow.com/ Вопросы/2962280/do-validations-still-fire-in-asp-net-even-if-the-controls-are-hidden Я думаю, что первоначальная причина этой ошибки еще не выяснена. – Jack

+0

Вы можете попытаться отключить validatorID или просто сделать оба из них видимыми = false, элемент управления и валидатор, чтобы они не отображались. –

+0

хорошая идея. Благодаря! – Jack

0

Использование JavaScript вы можете achive этого

<script type="text/javascript"> 
     function txtAmtOff() 
     { 
      document.getElementById("txtAmt").style.display = 'none'; 
      ValidatorEnable(document.getElementById("txtAmtValidator"), false); 
     } 
     function txtAmtOn() 
     { 
      document.getElementById("txtAmt").style.display = 'inline'; 
      ValidatorEnable(document.getElementById("txtAmtValidator"), true); 
     } 
    </script> 
Смежные вопросы