Использование элемента управления CompareValidator для сравнения даты ввода данных с сегодняшней датой

hey..i хотел бы сравнить текущую дату с датой, введенной пользователем. Однако до сих пор я сталкиваюсь с ошибками.

Я попробовал что-то вроде этого:

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

и я получил сообщение о том, что значение DateTime.Today.ToShortDateString() свойства ValueToCompare объекта "" не может быть преобразовано в тип 'date' Я также пробовал ValueToCompare="DateTime.Now.Date()", и я получил то же сообщение об ошибке.

Пожалуйста, помогите мне, и я очень благодарен.

Ответ 1

Вы используете свойство ValueToCompare как литерал. Вам нужно использовать теги ASP, если вы хотите выполнить код для получения динамического значения. Попробуйте следующее:

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

Затем в вашем методе Page_Load вызовите Page.DataBind().

Это приведет к выполнению кода базы данных, когда страница будет загружена, и поместите значение между кавычками.

Ответ 2

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

В событии загрузки страницы установите значение проверки для сравнения как

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

Ответ 3

Мы можем установить ValueToCompare в код за

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

для валидатора сравнения:

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

Почему бы не использовать Page.DataBind?

Рассмотрим следующий сценарий. Мне нужно отобразить gridview только при нажатии кнопки "Действие". Источник данных определяется декларативно. Но, если я использую Page.DataBind(), он покажет сетку даже при загрузке страницы.

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

Код за

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

Ответ 4

Попробуйте следующее:

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