4

私のビューモデル:

public partial class FileTransferFilterCriteriaViewModel
{
    public string Fice { get; set; }
    public string SourceEmail { get; set; }
    public string TargetEmail { get; set; }
    public DateTime FromDate { get; set; }
    public DateTime ToDate { get; set; }
    public string Status { get; set; }
    public string Category { get; set; }
}

(DBからは何も来ていません。)

私のコントローラー:

return View(new FileTransferFilterCriteriaViewModel())

との両方FromDateで表示される内容は次のToDateとおりです。

1/1/0001 12:00:00 AM

私のHTML:

@Html.TextBoxFor(x =>x.Criteria.FromDate)

質問:

  1. 日付がの場合null、デフォルトの日付値の表示を抑制するにはどうすればよいですか?
  2. 日付がそうでない null場合、どうすれば日付を次のようにフォーマットできますMM/dd/yyyyか?
4

3 に答える 3

13

ViewModelでnull許容の日付を使用します。

public DateTime? FromDate { get; set; }
于 2012-08-21T05:25:18.613 に答える
2

エディター テンプレートを作成しましたが、これでうまくいきました。

ビュー モデルへの変更:

[UIHint(UiHintConstants.DateCalendar)]
        public DateTime? FromDate { get; set; }

        [UIHint(UiHintConstants.DateCalendar)]
        public DateTime? ToDate { get; set; }

その後、Views/Shared/EditorTemplate フォルダーに DateCalendar.chtml という名前のエディター テンプレートを作成しました。

@using System.Globalization
@model DateTime?

@Html.TextBox("", (Model.HasValue && !Model.Value.ToString(CultureInfo.InvariantCulture).Contains("1900") && !Model.Value.ToString(CultureInfo.InvariantCulture).Contains("0001") ? Model.Value.ToString("MM/dd/yyyy") : string.Empty), new { @class = "datePicker", maxlength = "12", size = "12" })

そしてそれを次のように利用しました:

@Html.EditorFor(x =>x.FromDate)
@Html.EditorFor(x => x.ToDate)

ソースコードは次のとおりです。

<input class="datePicker" id="Criteria_FromDate" maxlength="12" name="Criteria.FromDate" size="12" type="text" value="" />

<input class="datePicker" id="Criteria_ToDate" maxlength="12" name="Criteria.ToDate" size="12" type="text" value="" />

これが他の人に役立つことを願っています。

ただし、サイズと maxlenth をテンプレートから移動して、1 つの部分を把握できませんでした。この場合は関係ありませんが、テキスト ボックスをロックしたり、jquery カレンダーを使用したくない場合など、他のインスタンスになる可能性があります。私はこれについてのハンドルを持っているとすぐに投稿します.

于 2012-08-21T06:06:19.473 に答える
0

すべてが完璧に機能しています。ただし、データベースからデータをフェッチしていません(新しくインスタンス化されたビューモデルを渡すことで証明されますreturn View(new FileTransferFilterCriteriaViewModel()))。コントローラのアクションメソッド内でそれを行うことを検討する必要があります。短い日付形式を取得するには、次を使用します@Html.TextBoxFor(x =>x.Criteria.FromDate.ToShortDateString())

于 2012-08-21T05:23:46.793 に答える