asp.net - validationmessagefor - validation summary asp net
ValidaciĆ³n de fecha con el validador de ASP.NET (4)
Creo que la siguiente es la forma más fácil de hacerlo.
<asp:TextBox ID="DateControl" runat="server" Visible="False"></asp:TextBox>
<asp:RangeValidator ID ="rvDate" runat ="server" ControlToValidate="DateControl" ErrorMessage="Invalid Date" Type="Date" MinimumValue="01/01/1900" MaximumValue="01/01/2100" Display="Dynamic"></asp:RangeValidator>
Estoy tratando de usar un ASP.NET RangeValidator
para validar una fecha en un cuadro de texto. El formato de la fecha ingresada en el cuadro de texto es dd MMMM yyyy
.
¿Cómo puedo usar el validador de rango para validar una fecha válida? Si ingreso el 1 de enero de 1000 como el valor mínimo o máximo, aparece un error que indica que el valor no se puede convertir a tipo fecha, pero si utilizo otro formato, el texto ingresado no es válido.
A continuación está mi código:
<asp:TextBox
runat="server"
ID="txtDatecompleted"
/>
<cc2:CalendarExtender
ID="datecompletedExtender"
runat="server"
TargetControlID="txtDatecompleted"
Format="dd MMMM yyyy"
/>
<asp:RangeValidator
runat="server"
ID="RangeValidator1"
Type="Date"
ControlToValidate="txtDatecompleted"
MaximumValue="9999/12/28"
MinimumValue="1000/12/28"
ErrorMessage="enter valid date"
Display="None"
/>
<cc2:ValidatorCalloutExtender
ID="RangeValidator1_ValidatorCalloutExtender"
runat="server"
Enabled="True"
TargetControlID="RangeValidator1">
</cc2:ValidatorCalloutExtender>
Creo que las fechas deben especificarse en la cultura actual de la aplicación. Es posible que desee experimentar con la configuración de CultureInvariantValues en true y ver si eso resuelve su problema. De lo contrario, es posible que deba cambiar DateTimeFormat para la cultura actual (o la culture sí) para obtener lo que desea.
La mejor opción sería
Agregue un validador de comparación al formulario web. Establezca su control para validar. Establezca su propiedad Type en Date. Establezca su propiedad de operador en DataTypeCheck, por ejemplo:
<asp:CompareValidator
id="dateValidator" runat="server"
Type="Date"
Operator="DataTypeCheck"
ControlToValidate="txtDatecompleted"
ErrorMessage="Please enter a valid date.">
</asp:CompareValidator>
Un CustomValidator también funcionaría aquí:
<asp:CustomValidator runat="server"
ID="valDateRange"
ControlToValidate="txtDatecompleted"
onservervalidate="valDateRange_ServerValidate"
ErrorMessage="enter valid date" />
Código detrás:
protected void valDateRange_ServerValidate(object source, ServerValidateEventArgs args)
{
DateTime minDate = DateTime.Parse("1000/12/28");
DateTime maxDate = DateTime.Parse("9999/12/28");
DateTime dt;
args.IsValid = (DateTime.TryParse(args.Value, out dt)
&& dt <= maxDate
&& dt >= minDate);
}