在我的网页上有分页和搜索选项,我必须重定向用户并传递搜索选项。通过此操作,我不想通过URL传递搜索模型(例如http://localhost:1234/?Project.Models.TestModel=...。)。
我的actionlink现在如下:
@Html.ActionLink(i.ToString(), "Index", new { idtrips = Model.idTrips, inituser = Model.initUser, date = Model.date.ToString("ddMMyyyy"), page = i})
点击后会产生以下标题: http://localhost:58763/?idtrips=0&inituser=0&date=05042016&page=5
我的问题是: 你能以某种方式将Html.ActionLink中的if子句添加到仅在需要时给出值。例如,我只设置了日期,然后我希望Url为:http://localhost:58763/?date=05042016&page=5。其他值在我的控制器中有一个默认值,所以这个url会起作用,但是我无法生成它。
我的控制器:
public ActionResult Index(long idtrips = 0, long inituser = 0, string date = "", int page = 1)
{ ... }
我正在寻找的是这样的:
@Html.ActionLink(i.ToString(), "Index", new { if(Model.idTrips > 0) { idtrips = Model.idTrips,} page = i})
答案 0 :(得分:1)
您可以使用ternary statement(例如inline-if语句)完成此操作:
new { idtrips = Model.idTrips > 0 ? Model.IdTrips : 0, page = i}
由于您有idtrips
的默认参数值,因此只应将其设置为大于0的其他值。
如果您根本不希望显示该值,则可以考虑简单地将其设置为可以为空的long?
长参数(并确保它与您的模型匹配):
public ActionResult Index(long? idtrips = 0, ... ) { ... }
使用这种方法,您只需按预期设置它:
new { idtrips = Model.idTrips, page = i}
如果Model.idTrips
为空(例如默认值),那么它将指向:
Controller/Index?page=1
但是,如果它是任何非null值,它将按预期呈现querystring参数:
Controller/Index?idtrips=42&page=1