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.
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.
<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();
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;
}
}
}
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();
}