2016-08-18 2 views
0

私のコードにreapeaterがあり、asp.net requiredフィールドバリデーターを使用してテキストボックスを検証しようとしています。しかし、検証メッセージ が表示されない、私は開発者のツールを開いて、そのスタイル= "visibility:hidden"が必要なフィールドバリデーターに追加されていることを発見しました。以下 は私のコード必須フィールドバリデーターがasp.netリピーターに隠されています

<asp:Repeater ID="RepeaterCategory" runat="server" DataSource='<%# this.Categories.Count==0 ? null : this.Categories %>'> 
    <ItemTemplate> 
     <div> 
      <asp:Label runat="server" Visible="true" Text="Category" /> 
      <asp:PlaceHolder runat="server" Visible="true"> 
       <asp:TextBox ID="txtCategoryID" runat="server" value="1" /> 
       <asp:TextBox ID="txtCategoryName" runat="server" value="<%# (Container.DataItem as Category).Name %>" /> 
       <asp:RequiredFieldValidator runat="server" ErrorMessage="<br/>This is a required field" ControlToValidate="txtCategoryName" ValidationGroup="NewCategoryGroup"></asp:RequiredFieldValidator> 
      </asp:PlaceHolder> 
      <asp:LinkButton runat="server" ToolTip="Save" ValidationGroup="NewCategoryGroup" OnClick="SaveCategory_Click"><img src='<%# some path%>/images/save.gif' /></asp:LinkButton> 
      <asp:LinkButton runat="server" ToolTip="Close" OnClick="CloseCategory_Click"></asp:LinkButton> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 

コードは、誰もがそれを有効にする方法を提案することができますか?ファイル

protected void SaveCategory_Click(object o, EventArgs e) 
{ 
    Page.Validate("NewCategoryGroup"); 
    if (!Page.IsValid) 
     return; 

    //logic 
} 

の背後にありますか

答えて

0

style="visibility:hidden"はデフォルトの動作です。エラーメッセージが表示される必要がある場合は、style="visibility: visible;"に変更されます。したがって、おそらくエラーはありません。

バリデーターは「RequiredFieldValidator」であり、検証中のテキストボックスには既に「TestCategory」という値が設定されているため、エラーはありません。保存ボタン(IDタグを持たない)にテキストを追加して表示させるだけの場合は、txtCategoryNameテキストボックスから値を削除し、保存ボタンをクリックするとエラーメッセージが表示されます。

これは動作します:あなたはこのコードを必要としない

<asp:TextBox ID="txtCategoryName" runat="server" value="" /> 
<asp:RequiredFieldValidator runat="server" ErrorMessage="<br/>This is a required field" ControlToValidate="txtCategoryName" ValidationGroup="NewCategoryGroup"></asp:RequiredFieldValidator> 

<asp:LinkButton runat="server" ToolTip="Save" ValidationGroup="NewCategoryGroup" OnClick="SaveCategory_Click" ID="LinkButton1">Save Me!</asp:LinkButton> 

Page.Validate("NewCategoryGroup"); 
if (!Page.IsValid) 

もう一つの利点は、バリデータは、これは、サーバーへのラウンドトリップを保存し、ポストバックせずに今に動作することです。

また、サーバー側の検証も行いますが、ポストバックなしで最初の検証を実行してください。何をしたい

UPDATE

はおそらく、アイテムごとの検証です。あなたのバリデーショングループは常に同じなので、すべてのテキストボックスに対して実行されます。これを試してください:

<asp:Repeater ID="RepeaterCategory" runat="server"> 
    <ItemTemplate> 
     <div> 
      <asp:TextBox ID="txtCategoryName" runat="server" ValidationGroup='<%# "myVal_" + Container.ItemIndex %>' Text='<%# Eval("Category") %>' /> 
      <br /> 
      <asp:RequiredFieldValidator runat="server" Display="Dynamic" ErrorMessage="This is a required field<br />" ControlToValidate="txtCategoryName" ValidationGroup='<%# "myVal_" + Container.ItemIndex %>'></asp:RequiredFieldValidator> 
      <asp:LinkButton runat="server" ValidationGroup='<%# "myVal_" + Container.ItemIndex %>' OnClick="Button1_Click" ID="LinkButton1">Save Me!</asp:LinkButton> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 
+0

私のコードを更新してください – RCM

+0

RequiredFieldValidatorは機能しますか?私の例をコピーしていなければ、それをテストし、それがうまくいけば、あなたのニーズに合うように変更してください。 – VDWWD

+0

バリデーターが動作しない – RCM

関連する問題