2010-02-15 87 views
10

hey..i想比較當前日期與user..however輸入的日期,我遇到錯誤爲止..使用CompareValidator控件比較用戶輸入的日期與今天的日期

我嘗試是這樣的:

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

,我得到了一個錯誤,指出的「的」 ValueToCompare屬性DateTime.Today.ToShortDateString()值不能轉換爲類型「日期」 我也嘗試ValueToCompare="DateTime.Now.Date()"和我有同樣的錯誤信息。

請幫助我,我非常感激。

+0

我們可以在代碼中設置ValueToCompare後面。 'Comparevalidator1.ValueToCompare = DateTime.Today.ToShortDateString();' – Lijo

回答

15

您只是使用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()

這將在頁面加載時執行數據綁定代碼,並將值放在引號之間。

+0

this show me'Comparevalidator1'的ValueToCompare屬性的值''不能轉換爲類型'Date'。 – HelloBD

+0

對不起 - 我忘了提及,你還需要在Page_Load方法中調用「Page.DataBind()」。 – womp

+2

想知道,如果這需要你在Page_Load中調用'DataBind()',你能不能在Page_Load中編寫'MyCompareValidator.ValueToCompare = DateTime.Today.ToShortDateString();'? – comecme

-1

嘗試下面寫着:

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

CompareValidator需要貨幣,日期,雙精度,整數或字符串作爲類型。使用Visual Studio中的Intellisense進行檢查。我正在使用VS2008和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> 

在頁面加載事件中設置驗證器的值進行比較的

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

我們可以設置ValueToCompare在後面的代碼

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

fo R上的比較驗證:

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

爲什麼不使用的Page.DataBind?

請考慮以下情況。我只需要點擊Action按鈕就可以顯示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; 
     } 
    } 
    }