asp.net - page - asp route tag helper
Activa o desactiva dinámicamente RequiredFieldValidator según el valor de DropDownList (7)
¿Por qué no utilizar un CustomValidator en este caso? Desactivar / encender un RequiredFieldValidator podría llevar a un problema de diseño en el futuro. Me limitaría a usarlos en campos que serán necesarios.
Tengo un formulario ASP.NET con tres entradas de texto, una para "Teléfono de trabajo", "Teléfono de casa" y "Teléfono celular". Cada una de estas entradas de texto tiene un RequiredFieldValidator asociado. También tengo una DropDownList donde el usuario puede seleccionar el tipo de teléfono preferido.
Solo quiero requerir el campo que está seleccionado en DropDownList. Por ejemplo, si el usuario selecciona "Teléfono de trabajo" de DropDownList, quiero desactivar RequiredFieldValidator para "Teléfono de casa" y "Teléfono celular", por lo que solo se requiere el campo "Teléfono de trabajo".
Tengo un método que habilita y deshabilita estos validadores según el valor de DropDownList, pero no puedo saber cuándo llamarlo. Quiero que este método se ejecute antes de que la validación tenga lugar en la página. ¿Como podría hacerlo?
Cuando está usando el teléfono de su hogar, en el evento desplegable seleccionado en el índice de cambio, haga que los validadores de campo requeridos sean invisibles.
me gusta..
si se selecciona el teléfono para el hogar,
homephonevalidator.visible=true
cellphonevalidator.visible=false
workphonevalidator.visible=false
si el teléfono celular está seleccionado,
homephonevalidator.visible=false
cellphonevalidator.visible=true
workphonevalidator.visible=false
si se selecciona el teléfono móvil,
homephonevalidator.visible=false
cellphonevalidator.visible=false
workphonevalidator.visible=true
El evento OnChange del menú desplegable puede tener algo como esto
function EnableValidator(){
ValidatorEnable(requiredFieldValidator, validatorMustBeEnabled);
}
Compruebe en esta url. Sección "API del lado del cliente"
http://msdn.microsoft.com/en-us/library/Aa479045#aspplusvalid_clientside
Esta es una buena forma de habilitar e inhabilitar la validación del control del servidor desde el evento jquery:
<label class="label_radio" for="Oversize" onclick="EnableDisbledValidator(''show'')">show textbox</label>
<asp:TextBox ID="txtNote" runat="server" class="checkvalidation"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvNote" runat="server" ControlToValidate="txtNote" SetFocusOnError="true" ErrorMessage="Please enter the note" Display="Dynamic" CssClass="error-tooltip"></asp:RequiredFieldValidator>
function EnableDisbledValidator(lblShow) {
if (lblShow == "hide") {;
ValidatorEnable($(''#<%=rfvNote.ClientID %>'')[0], false);
} else {
ValidatorEnable($(''#<%=rfvNote.ClientID %>'')[0], true);
}
}
La posible forma sería:
- Establecer en su DropDownList
AutoPostBack="true"
- En el controlador de eventos
SelectedIndexChanged
de DropDownList habilite / deshabilite sus validadores - Establezca en su DropDownList
CausesValidation="false"
para evitar que los validadores bloqueen una devolución de datos cuando cambie la entrada DropDownList.
OnChange of DropDownlist, necesitará registrar un controlador de eventos del lado del servidor que habilite / deshabilite el validador ...
HTH
Puedes hacer esto con JavaScript así:
ValidatorEnable(RequiredFieldValidatorId, false);
Luego haga que su lista desplegable use el evento onchange (sugiero usar jQuery)
$("#<%=dropDownList.ClientID %>").change(function(){
var val = $(this).val();
var skip = null;
if (val == 1)
skip = "workPhoneValidator";
else if (val == 2)
skip = "cellPhoneValidator";
....
// by popular demand...
var $skip = $("#" + skip)[0];
if (skip != "workPhoneValidator") ValidatorEnable($skip, false);
if (skip != "cellPhoneValidator") ValidatorEnable($skip, false);
....
});