2010-02-15 17 views
10

hey..i gustaría comparar la fecha actual con la fecha introducida por user..however, estoy encontrando errores en lo que va ..Uso del control CompareValidator para comparar la fecha de entrada del usuario con la fecha de hoy

i intentó algo como esto:

<asp:TextBox id="txtDate1" runat="server" />  
<asp:CompareValidator runat="server" ErrorMessage="The date must be greater than today" 
    ControlToValidate="txtDate1" type="date" 
    ValuetoCompare="DateTime.Today.ToShortDateString()" /> 

y me dieron un error que indica que el valor de DateTime.Today.ToShortDateString() de la propiedad ValueToCompare de "" no se puede convertir al tipo 'fecha' también intenté ValueToCompare="DateTime.Now.Date()" y me dieron el mismo mensaje de error .

por favor ayúdenme y lo agradezco mucho.

+0

Podemos establecer el ValueToCompare en código detrás. 'Comparevalidator1.ValueToCompare = DateTime.Today.ToShortDateString();' – Lijo

Respuesta

15

Está utilizando la propiedad ValueToCompare como una cadena literal. Debe usar etiquetas ASP si desea ejecutar código para obtener un valor dinámico. Prueba esto:

<asp:comparevalidator runat="server" 
    errormessage="The date must be greater than today" 
    controltovalidate="txtDate1" type="date" 
    valuetocompare="<%# DateTime.Today.ToShortDateString() %>" /> 

Luego, en el método de Page_Load, llaman Page.DataBind().

Esto ejecutará el código del encuadernador de datos cuando se cargue la página, y colocará el valor entre las comillas.

+0

this me show El valor '' de la propiedad ValueToCompare de 'Comparevalidator1' no se puede convertir a tipo 'Fecha'. – HelloBD

+0

Lo siento, olvidé mencionar que también deberás llamar a "Page.DataBind()" en tu método Page_Load. – womp

+2

Solo me pregunto, si esto requiere que llames a 'DataBind()' en el Page_Load, ¿no podrías escribir 'MyCompareValidator.ValueToCompare = DateTime.Today.ToShortDateString();' en Page_Load? – comecme

-1

Pruebe el siguiente escrito:

<asp:CompareValidator runat="server" ErrorMessage="The date must be greater than today" 
ControlToValidate="txtDate1" type="DateTime" 
ValuetoCompare='<%# DateTime.Now.ToString("d") '%> /> 
+0

El CompareValidator requiere Moneda, Fecha, Doble, Entero o Cadena como Tipo. Consulte con Intellisense en Visual Studio. Estoy usando VS2008 y Asp.Net 3.5. –

6
<asp:CompareValidator ID="CompareValidator3" runat="server" 
         ControlToValidate="TextBox1" ErrorMessage="Date should be on or after today" 
         Operator="GreaterThanEqual" Type="Date"> 
</asp:CompareValidator> 

En el caso de carga de la página ajustar el valor del validador para comparar como

CompareValidator3.ValueToCompare = DateTime.Now.ToShortDateString(); 
1

Podemos establecer el ValueToCompare en código detrás

 if (!Page.IsPostBack) 
     { 
      string currentDate = DateTime.Today.ToShortDateString(); 
      Comparevalidator1.ValueToCompare = currentDate; 
     } 

fo r el validador compara:

<asp:CompareValidator ID="Comparevalidator1" runat="server" ErrorMessage="The date must be greater than today" 
    Operator="GreaterThan" ControlToValidate="txtDate1" Type="date" Display="Dynamic" /> 

Por qué no usar Page.DataBind?

Tenga en cuenta la situación siguiente. Necesito mostrar la vista de cuadrícula solo al hacer clic en el botón Acción. El origen de datos se define de manera declarativa. Pero, si uso Page.DataBind(), mostrará la grilla incluso en la carga de la página.

<form id="form1" runat="server"> 
<asp:TextBox ID="txtDate1" CssClass="firstBox" runat="server" Text=""></asp:TextBox> 
<asp:CompareValidator ID="Comparevalidator1" runat="server" ErrorMessage="The date must be greater than today" 
    Operator="GreaterThan" ControlToValidate="txtDate1" Type="date" Display="Dynamic" /> 
<asp:Button ID="btnAction" class="submitButton" runat="server" Text="Action" OnClick="btnAction_Click" /> 
<asp:Button ID="btnDummy" class="submitButton" runat="server" Text="Dummy" OnClick="btnDummy_Click" /> 
<br /> 
<br /> 

<asp:GridView ID="GridView1" runat="server" DataSource="<%# EmployeesResult %>"> 
</asp:GridView> 
</form> 

Código detrás

public partial class ThirdTest : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     //Page.DataBind(); 

     if (!Page.IsPostBack) 
     { 
      string currentDate = DateTime.Today.ToShortDateString(); 
      txtDate1.Text = currentDate; 
      Comparevalidator1.ValueToCompare = currentDate; 
     } 
    } 

    protected void btnAction_Click(object sender, EventArgs e) 
    { 
     GridView1.DataBind(); 
     string value = GridView1.DataSource.ToString(); 
    } 

    protected void btnDummy_Click(object sender, EventArgs e) 
    { 

    } 

    //Propertry 
    public List<Employee> EmployeesResult 
    { 
     get 
     { 
      List<Employee> employees = new List<Employee>(); 
      employees.Add(new Employee { EmpID = 1, EmpName = "Emp1" }); 
      employees.Add(new Employee { EmpID = 2, EmpName = "Emp2" }); 
      return employees; 
     } 
    } 
    } 
Cuestiones relacionadas