Nessuno dei ASP.NET fornito validatori consentono di eseguire la convalida condizionale basata su un altro controllo. Tuttavia, è possibile ottenere ciò utilizzando un CustomValidator che esegue la convalida sul lato client, sul lato server o su entrambi (come minimo, è consigliabile la convalida sul lato server). I validatori funzionano bene insieme ai maghi.
esempio ASP.NET markup:
<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 per 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 per OnServerValidate:
protected void ValidateOtherTextBox(object source, ServerValidateEventArgs args)
{
if (OptionsDropDownList.SelectedValue == "Other")
{
args.IsValid = (OtherTextBox.Text.Trim() != "");
}
}
Nota che è la tua scelta implementare tutto ciò di cui hai bisogno. Puoi saltare completamente la convalida di Javascript e rimuovere quel codice e l'attributo ClientValidationFunction
. Inoltre, si noti che Javascript si riferisce al controllo di destinazione utilizzando la proprietà ClientID. Questo è necessario dal momento che ASP.NET assegna un ID diverso quando la pagina viene emessa e vorrà che venga fornita al metodo Javascript in questo modo (visualizza l'origine sulla pagina e vedrai che il nome del controllo ha un extra prefisso ecc.).
fonte
2009-09-11 12:20:46