2

タイトルはそれをすべて言います。モデルには StartDate フィールドは必要ありませんが、POST では必須であると言われました。これはいくつかの検索フィールドの 1 つで、それぞれがオプションです。そのため、 IsModel.Valid をチェックしていないため、検索は機能しますが、画面にメッセージが表示されます。ビューで @Html.ValidationSummary(true) を設定すると、メッセージは非表示になりますが、フィールドは依然として赤くなります。

また、EndDate が StartDate よりも遅いことを確認するためのチェックも行っているため、ISN'T エラーがない場合だけでなく、エラー /必須フィールドが表示されるメッセージが必要です。

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

モデル(一部)

[Display(Name = "Start Date")]
[DataType(DataType.Date)]
public DateTime StartDate { get; set; }

[Display(Name = "End Date")]
    [GreaterThanOrEqualTo("StartDate", ErrorMessage = "End Date must be later than Start Date")]
    [DataType(DataType.Date)]
    public DateTime EndDate { get; set; }

VIEW(一部)

@using (Html.BeginForm()){ 
@Html.ValidationSummary(false)
<table>
<tr>
    <td>
        @Html.DisplayNameFor(m => m.StartDate)
        @Html.TextBox("StartDate", "", new { @class = "datefield" })

etc.

共有/表示テンプレート

@model Nullable<DateTime>
@(Model != null ? string.Format("{0:M/d/yyyy}", Model) : string.Empty)

共有/エディター テンプレート

@model Nullable<DateTime>
 @{
DateTime dt = DateTime.Now;
if (Model != null)
{
   dt  = (System.DateTime) Model;

}
@Html.TextBox("", String.Format("{0:M/d/yyyy}", dt.ToShortDateString()), new { @class = "datefield", type = "date"  })
} 

これらのエディタの中には、ポップアップ カレンダーを機能させるものもあります。

さまざまなことをオン/オフしようとしましたが、何らかの方法で日付フィールドが必要であると言われています。何か案は?ありがとう。

4

2 に答える 2

5

コメントで述べたように、DateTime、int、decimal などの値の型は、null 許容にしないと必須として扱われます。

GreaterThanOrEqualTo 属性がライブラリ (MVC Foolproof Validation など) から取得されていない場合、Startdate と Enddate の両方が null の場合は true を返すようにする必要があります。それ以外の場合は、独自のカスタム検証属性を作成する必要がありますが、それほど難しくありません。

于 2013-07-02T17:42:26.393 に答える