0

生年月日を入力するために、カレンダーエクステンダーを備えたテキストボックスを使用しています。日付が今日またはそれ以前であることを検証しています。次のコードがあります。

<asp:TextBox ID="txtDateOfBirth" runat="server" </asp:TextBox><ajaxToolkit:CalendarExtender ID="txtDateOfBirth_CalendarExtender" runat="server" Enabled="True" TargetControlID="txtDateOfBirth" Format="MM/dd/yyyy" </ajaxToolkit:CalendarExtender>

<asp:CompareValidator ID="cvDateOfBirth" runat="server" ControlToValidate="txtDateOfBirth" ErrorMessage="Must be today or older" Display="Dynamic" Operator="LessThanEqual"></asp:CompareValidator>

私は自分のPage_Loadに次のものを持っています

cvDateOfBirth.ValueToCompare = DateTime.Today.ToString("MM/dd/yyyy");

CompareValidator では、Type を文字列に設定しています。日付に設定すると、エラーが発生します

「cvDateOfBirth」の ValueToCompare プロパティの値「04/21/2013」は、タイプ「Date」に変換できません。

日付を MM/dd/yyyy としてフォーマットしています。これは、最初に MM を使用するように日付をフォーマットしない場合 (デフォルトのままにしておく場合)、月が12 より大きい (SQL 2008 R2)。Type を String のままにすると、検証は正しく機能しますが、今年だけです。2012 年 12 月 31 日 (2012 年 12 月 31 日) のような日付を選択すると、検証に失敗します。誰かが私が間違っていることを指摘できますか。また、CompareValidator の Type を Date に設定する必要があるという投稿をいくつか読みましたが、上記のエラーが発生します。また、テキストボックスの文字列と比較すると、これが文字列ではなく日付に設定されるのはなぜですか。手伝ってくれてありがとう。

4

1 に答える 1

1

最初にあなたがしなければならないこと(今日の日付との比較日付を割り当てます):

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            cvDateOfBirth.ValueToCompare = DateTime.Today.Date.ToString("dd/MM/yyyy");
        }
    }

次に、必要な結果を取得する2つの方法::


最初の方法:

<asp:TextBox ID="txtDateOfBirth" runat="server"></asp:TextBox><ajaxtoolkit:CalendarExtender
            ID="txtDateOfBirth_CalendarExtender" runat="server" Enabled="True" TargetControlID="txtDateOfBirth"
            Format="dd/MM/yyyy">
        </ajaxtoolkit:CalendarExtender>
        <asp:CompareValidator ID="cvDateOfBirth" runat="server" ControlToValidate="txtDateOfBirth" SetFocusOnError="true"
            Type="Date" Operator="LessThanEqual" ErrorMessage="Incorrect Date"
            ForeColor="Red"></asp:CompareValidator>

次に、コード ビハインド .cs ファイルで選択した日付を取得MM-dd-yyyしてデータベースに保存します::

protected void OnSave_Click(object sender, EventArgs e)
{
    DateTime selcetdDate=Convert.ToDateTime(txtDateOfBirth.Text);
    string date = selcetdDate.ToString("MM/dd/yyyy");
}


それを達成する他の方法:

<script type="text/javascript">
    function getDOB() {
        var selected = document.getElementById('lbl_date').value;
        var txtDateOfBirth = document.getElementById('txtDateOfBirth');
        if (selected != "") {
            var st = selected.split('/');
            txtDateOfBirth.value = st[1] + '/' + st[0] + '/' + st[2];
        }
        else
            txtDateOfBirth.value = "";
    }
</script>

 <asp:TextBox ID="txtDateOfBirth" runat="server"></asp:TextBox>
        <asp:TextBox ID="lbl_date" runat="server" Text="" style="display:none;" onchange="getDOB()"></asp:TextBox>
        <ajaxtoolkit:CalendarExtender
            ID="txtDateOfBirth_CalendarExtender" runat="server" Enabled="True" TargetControlID="lbl_date" PopupButtonID="txtDateOfBirth"
            Format="dd/MM/yyyy">
        </ajaxtoolkit:CalendarExtender>
        <asp:CompareValidator ID="cvDateOfBirth" runat="server" ControlToValidate="lbl_date" SetFocusOnError="true"
            Type="Date" Operator="LessThanEqual" ErrorMessage="Incorrect Date"
            ForeColor="Red"></asp:CompareValidator>
    </div>

コードビハインド .cs ファイル内

protected void OnSave_Click(object sender, EventArgs e)
{
    string date = txtDateOfBirth.Text;
}

日付のCompareValidator プロパティValueToCompareにはデフォルトの形式dd-MM-yyyy があるため、他の日付形式と比較するには手動でこれを行う必要があります。したがって、上記の 2 つのオプションを使用して、日付形式と比較検証を行うことができますMM/dd/yyyy

乾杯 !

于 2013-04-22T06:52:23.793 に答える