グリッドビューの各行にカスタムバリデーターがあり、グリッドビューが配置されているパネルの下部に概要があるという問題があります。
カスタムバリデーターは想定どおりに起動し、args.IsValid = falseを設定して適切なエラーメッセージを割り当てましたが、画面にカスタムバリデーターのテキストも、概要にerrorMessageも表示されません。実際、要約はまったく表示されません。
他の場所でほぼ同じセットアップを使用していて、正常に機能したため、これを確認しましたが、なぜこれが発生するのかわかりません。
マークアップ:
<asp:GridView ID="gvConsolidatedPeriods" runat="server" OnRowDataBound="gvConsolidatedPeriods_OnRowDataBound" SkinID="alternativeRows"
AutoGenerateColumns="false" Width="99%" OnDataBound="gvConsolidatedPeriods_OnDataBound" OnRowEditing="gvConsolidatedPeriods_OnRowEditing"
OnRowCancelingEdit="gvConsolidatedPeriods_OnRowCancellingEdit" OnRowDeleting="gvConsolidatedPeriods_OnRowDeleting" ValidationGroup="ConsolidatedPeriodValidationGroup">
<Columns>
<asp:TemplateField HeaderText="Period">
<HeaderStyle Font-Bold="True" HorizontalAlign="Left" Width="250px" />
<ItemStyle HorizontalAlign="Left" Width="250px" />
<ItemTemplate>
<asp:Label ID="lblPeriod" runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:HiddenField ID="hdPeriodId" runat="server" />
<asp:Label ID="lblPeriod" runat="server" Visible="false"/>
<asp:TextBox ID="txtFromDate" runat="server" CssClass="datepicker" Visible="false"/>
<br />
<asp:Label ID="lblTo" runat="server" Visible="false" Text=" to " CssClass="label" />
<br />
<asp:TextBox ID="txtEndDate" runat="server" CssClass="datepicker" Visible="false"></asp:TextBox>
abc
<asp:CustomValidator ID="cvConsolidatedPeriodDates" runat="server" ValidationGroup="ConsolidatedPeriodValidationGroup" Text="*"
SetFocusOnError="True" ErrorMessage="" OnServerValidate="cvConsolidatedPeriodDates_OnServerValidate" ValidateEmptyText="true" Visible="true" Style=""/>s
</EditItemTemplate>
</asp:TemplateField>
..。
サーバー検証コード:
var rowToSave = gvConsolidatedPeriods.Rows[gvConsolidatedPeriods.EditIndex];
if (rowToSave != null)
{
var txtfromDate = rowToSave.FindControl("txtFromDate") as TextBox;
var txtendDate = rowToSave.FindControl("txtEndDate") as TextBox;
var cvConsolidatedPeriodValidator =
rowToSave.FindControl("cvConsolidatedPeriodDates") as CustomValidator;
var test = source as CustomValidator;
if (txtfromDate != null && txtendDate != null && txtfromDate.Visible)
{
if (String.IsNullOrEmpty(txtfromDate.Text))
{
args.IsValid = false;
test.ErrorMessage = "Period Dates are required";
return;
}
..。