以下のモデルは 2 つの方法で使用されます。
public class SimpleModel
{
public DateTime? Date { get; set; }
// Some other properties
public SimpleModel()
{
Date = DateTime.Now;
}
}
モデルがフォームで使用されている場合、生成された URL には空のパラメーター Date ( /Controller/Action?Date=&SomeOtherParams=123
) がありDate
、モデルのプロパティはnull
(空の日付でフォームを送信した後) です。
...
@Html.TextBoxFor(model => model.Date)
...
また、このモデルは の 3 番目のパラメーターとして使用されますUrlHelper.Action()
。
@Url.Action("Action", "Controller", Model) // Model is SimpleModel
この場合、Date
が null の場合、生成された URL にはパラメータ Date ( ) が含まれません/Controller/Action?SomeOtherParams=123
。そして、この URL をたどると、プロパティDate
はDateTime.Now
期待どおり null ではありません。
空のプロパティを URL に強制的に渡す方法は?
アップデート。アクションコード
public ActionResult MyAction( SimpleModel model = null )
{
if ( model.Date == null )
{
// show all
}
else
{
// show by date
}
}
実際には、代わりにTextBoxFor
使用されDropDownListFor
ます。
@Html.DropDownListFor( model => model.Date, Model.Dates)
ユーザーはドロップダウンから日付を選択するか、すべてのエンティティを表示したい場合は空のままにすることができます。
ユーザーが空の Date でフォームを送信すると、URL をたどっ/Controller/Action?Date=
てすべてのエンティティを取得します (Date プロパティはコンストラクターでデフォルト値で初期化され、null で上書きされます)。
ユーザー@Url.Action
が他のページから (フォームを送信せずに) 生成された URL をフォローすると、URL に日付パラメーター ( ) が含まれていないため、今日のエンティティのみが取得されます/Controller/Action
。この場合、コンストラクターでの Date プロパティの初期化とこれがすべてです。
問題は決してnullに等しくないことであり、ユーザーが空の日付を選択したときと、パラメーターなしでページにアクセスしたときを認識できませんmodel
。MyAction