Żaden z ASP.NET warunkiem zatwierdzające pozwalają sprawdzania poprawności warunkowego w oparciu o inną kontrolą. Można to jednak osiągnąć, używając parametru CustomValidator, który przeprowadza sprawdzanie poprawności po stronie klienta, po stronie serwera lub po obu stronach (zalecane jest przynajmniej sprawdzanie poprawności po stronie serwera). Walidatory działają dobrze w połączeniu z kreatorami.
przykład markup ASP.NET:
<asp:DropDownList ID="OptionsDropDownList" runat="server">
<asp:ListItem Text="Website" />
<asp:ListItem Text="Search Engine" />
<asp:ListItem Text="Other" />
</asp:DropDownList>
<asp:TextBox ID="OtherTextBox" runat="server" />
<asp:CustomValidator ID="custvOptionsDropDownList" runat="server" ControlToValidate="OptionsDropDownList"
ValidateEmptyText="true" Display="Dynamic" ClientValidationFunction="validateOtherTextBox"
ErrorMessage="This field is required!" OnServerValidate="ValidateOtherTextBox" />
Javascript dla ClientValidationFunction:
<script type="text/javascript" language="javascript">
function validateOtherTextBox(event, args) {
var textbox = document.getElementById('<%= OtherTextBox.ClientID %>').value;
if (args.Value == 'Other')
args.IsValid = (textbox != '');
else
args.IsValid = true;
}
</script>
Code-Behind dla OnServerValidate:
protected void ValidateOtherTextBox(object source, ServerValidateEventArgs args)
{
if (OptionsDropDownList.SelectedValue == "Other")
{
args.IsValid = (OtherTextBox.Text.Trim() != "");
}
}
Pamiętaj, że to twój wybór, aby zaimplementować wszystko, czego potrzebujesz. Możesz całkowicie pominąć sprawdzanie poprawności Javascript i usunąć ten kod oraz atrybut ClientValidationFunction
. Należy również zauważyć, że JavaScript odnosi się do kontrolki docelowej za pomocą właściwości ClientID. Jest to potrzebne, ponieważ program ASP.NET przypisuje inny identyfikator podczas generowania strony, a użytkownik chce, aby był dostarczany do metody JavaScript w ten sposób (wyświetl źródło na stronie, a zobaczysz, że nazwa kontrolki ma dodatkowe przedrostek itp.).