ねえ..私は現在の日付をユーザーが入力した日付と比較したいのですが..しかし、これまでのところエラーが発生しています。
私はこのようなことを試しました:
_<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()
の値を「date」型に変換できないというエラーが発生しました。ValueToCompare="DateTime.Now.Date()"
も試しました。同じエラーメッセージ。
私を助けてください、そして私はそれを大いに感謝します。
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()
を呼び出します。
これにより、ページが読み込まれたときにデータバインダーコードが実行され、値が引用符で囲まれます。
<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();
コードビハインドで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を使用しないのはなぜですか?
次のシナリオを考えてみましょう。アクションボタンをクリックするだけでグリッドビューを表示する必要があります。データソースは宣言的に定義されています。ただし、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;
}
}
}
これを試して。
<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>
ユーザーが日付を入力する方法(日付形式)も重要です。ここでは、MM.DD.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>
次に、Page_Loadメソッド(* .aspx.cs)で、Page.DataBind()を呼び出します。
例:
protected void Page_Load(object sender, EventArgs e)
{
Page.DataBind();
}