以下兩種方式使用的模型:UrlHelper.Action()跳過空屬性
public class SimpleModel
{
public DateTime? Date { get; set; }
// Some other properties
public SimpleModel()
{
Date = DateTime.Now;
}
}
當模型在形式使用,生成的URL具有空參數日期(/Controller/Action?Date=&SomeOtherParams=123
)和模型Date
屬性是null
(提交空白日期後的表格)。
...
@Html.TextBoxFor(model => model.Date)
...
同樣在該模型中UrlHelper.Action()
用作第三個參數:
@Url.Action("Action", "Controller", Model) // Model is SimpleModel
在這種情況下,如果Date
爲空,生成的URL不包含參數日期(/Controller/Action?SomeOtherParams=123
)。如果我按照這個網址,屬性Date
是DateTime.Now
,如預期的那樣不爲空。
如何強制將空的屬性傳遞給URL?
UPD。行動代碼
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)
用戶可以從下拉列表中選擇日期或活空,如果他想看到的所有實體。
如果用戶提交表單的日期爲空,他會跟着URL /Controller/Action?Date=
並獲取所有實體(Date屬性在構造函數中使用默認值初始化,然後用null重寫)。
如果用戶通過@Url.Action
從其他頁面(未提交表單)生成的網址跟隨,他僅獲得今天的實體,因爲URL不包含Date參數(/Controller/Action
)。在這種情況下,Date屬性在構造函數中初始化,這是全部。
問題是model
MyAction
永遠不會等於空,我不能識別當用戶選擇空日期,當他只是訪問頁面沒有參數。
我覺得很骯髒的解決方案:'@ Url.Action( 「行動」, 「控制器」,型號)&日期='會產生'/Controller/Action?SomeOtherParams = 123&Date =' –