根据值传递Html.ActionLink参数

时间:2016-04-05 14:57:00

标签: c# asp.net asp.net-mvc

在我的网页上有分页和搜索选项,我必须重定向用户并传递搜索选项。通过此操作,我不想通过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})

1 个答案:

答案 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