Использование элемента управления 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") '%> />