Arg。継承しているプロジェクトはとても面白いです。特にうまく動作しない場合、特にUpdatePanelsが含まれている場合...UpdatePanelに組み込まれたコントロールのバリデータを有効/無効にできません。
私はUpdatePanelの中に配送先ユーザーコントロールがあります。私は国際的な住所を処理できる必要があるので、私がしたことの1つは、選択された国が米国かどうかに応じて国のドロップダウンを表示/非表示することです。さらに、私はそのドロップダウンにRequiredFieldValidatorを持っています。
ユーザーコントロールがアプリケーションの他の場所の通常のページで使用されている場合、すべてが素晴らしいです。しかし、UpdatePanelでは、JavaScriptが行っても、.NETではRFVが表示されません。
Address.ascx:(切り取ら)
<li class="form-list-question question-state">
<span class="form-label">
<asp:Label ID="lblState" runat="server" SkinID="FieldLabel" AssociatedControlID="ddlState" Text="State" /></span>
<asp:DropDownList ID="ddlState" runat="server" SkinID="State" DataSourceID="dsStates" AppendDataBoundItems="true" ViewStateMode="Enabled"
DataTextField="Name" DataValueField="Abbr" CssClass="required">
<asp:ListItem Text="" Value=""></asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="rfvState" runat="server" EnableClientScript="true" Display="None" ControlToValidate="ddlState"
ErrorMessage="State is required." ValidationGroup="Address" />
</li>
address.js:(切り取ら)
function SetFormByCountry() {
if (isUsTerritory()) {
$('.question-state').show();
if ($('#rfvState').length > 0) {
$('#rfvState').enabled = true;
}
} else {
$('.question-state').hide();
if ($('#rfvState').length > 0) {
$('#rfvState').enabled = false;
}
}
}
現在の行動:US以外の国が選択され、状態のドロップダウンは適切に消えますが、フォームが送信されると、まだ非表示のドロップダウンで検証が行われます。作成されたJSエラーはありません。
期待される動作:上記のシナリオを前提として、RequiredFieldValidatorを無効にして、フォームをポストする必要があります。
上記のコードは、ValidatorEnable関数を使用する別の方法です。それは同じことを成し遂げます、そして、私は同じ結果を得ます。 –
ValidatorEnableは、クライアントコントロールとバリデーター間の関連付けも削除します。バリデーターを無効にするだけではなく、全く同じではありません。それは私があなたが何をしているのかを確実にするための唯一の方法です。 – dash