下面的模型有两种使用方式:
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)
...
该模型也用作第三个参数UrlHelper.Action()
:
@Url.Action("Action", "Controller", Model) // Model is SimpleModel
在这种情况下,如果Date
为 null,则生成的 URL 不包含参数 Date( /Controller/Action?SomeOtherParams=123
)。如果我关注此 URL,则属性Date
为DateTime.Now
,而不是预期的 null 。
如何强制将空属性传递给 URL?
UPD。动作代码
public ActionResult MyAction( SimpleModel model = null )
{
if ( model.Date == null )
{
// show all
}
else
{
// show by date
}
}
实际上,而不是TextBoxFor
used DropDownListFor
。
@Html.DropDownListFor( model => model.Date, Model.Dates)
如果他想查看所有实体,用户可以从下拉菜单中选择日期或将其留空。
如果用户提交带有空日期的表单,他会跟随 URL/Controller/Action?Date=
并获取所有实体(日期属性在构造函数中使用默认值初始化,然后用 null 覆盖)。
如果用户通过@Url.Action
从其他页面生成的 url(不提交表单)跟随,他只会得到今天的实体,因为 URL 不包含 Date 参数(/Controller/Action
)。在这种情况下 Date 属性在构造函数中初始化,这就是全部。
问题是model
从不MyAction
等于 null,我无法识别用户何时选择空日期以及何时访问没有参数的页面。