web-dev-qa-db-fra.com

Utilisation du contrôle CompareValidator pour comparer la date de saisie de l'utilisateur avec la date du jour

hé..je voudrais comparer la date du jour avec la date entrée par l'utilisateur..que ce soit, je rencontre des erreurs jusqu'à présent .. 

j'ai essayé quelque chose comme ça:

<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()" />

et j'ai eu une erreur indiquant que la valeur de DateTime.Today.ToShortDateString() de la propriété ValueToCompare de "" ne peut pas être convertie en type 'date' J'ai également essayé ValueToCompare="DateTime.Now.Date()" et j'ai reçu le même message d'erreur.

aidez-moi s'il vous plaît et je l'apprécie grandement. 

11
HelloBD

Vous utilisez simplement la propriété ValueToCompare en tant que chaîne littérale. Vous devez utiliser les balises ASP si vous voulez exécuter du code pour obtenir une valeur dynamique. Essaye ça:

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

Ensuite, dans votre méthode Page_Load, appelez Page.DataBind()

Cela exécutera le code du fabricant de données lorsque la page sera chargée et placera la valeur entre les guillemets.

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

Dans l'événement de chargement de page, définissez la valeur du validateur à comparer en tant que

CompareValidator3.ValueToCompare = DateTime.Now.ToShortDateString();
6
Abhishek kumar

On peut mettre la ValueToCompare dans le code derrière

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

pour le validateur de comparaison:

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

Pourquoi ne pas utiliser Page.DataBind?

Considérez le scénario suivant. Je n'ai besoin d'afficher la grille que sur le clic du bouton Action. La source de données est définie de manière déclarative. Mais, si j'utilise Page.DataBind (), la grille sera affichée même lors du chargement de la page. 

 <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>

Code derrière

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;
        }
    }
  }
1
Lijo

Essaye ça.

<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="Date is required" ControlToValidate="txtmDate"></asp:RequiredFieldValidator>

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Date is not valid (MM.DD.YYYY)" ControlToValidate="txtDate" ValidationExpression="(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d" ></asp:RegularExpressionValidator>

Le mode de saisie de la date par l'utilisateur (format de la date) est également important. Ici, j'ai utilisé le format de date MMDD.YYYY.

<asp:CompareValidator ID="CompareValidatorGreaterThanToday" runat="server" ErrorMessage="The date must be greater than today" ControlToValidate="txtDate" Type="date" Operator="GreaterThan" ValueToCompare="<%# DateTime.Today.ToShortDateString() %>" ></asp:CompareValidator>

Ensuite, dans votre méthode Page_Load (* .aspx.cs), appelez Page.DataBind ().

Exemple:

protected void Page_Load(object sender, EventArgs e)
{            
   Page.DataBind();
}
0
D T