【问题标题】:Pass parameter with Html.ActionLink based upon value根据值使用 Html.ActionLink 传递参数
【发布时间】:2016-04-06 00:04:34
【问题描述】:

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

我的问题是: 您能否以某种方式将 if 子句添加到 Html.ActionLink 以仅在需要时提供值。例如,我只设置了一个日期,那么我希望 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})

【问题讨论】:

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


    【解决方案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
    

    但是,如果它是任何非空值,它将按预期呈现查询字符串参数:

    Controller/Index?idtrips=42&page=1  
    

    【讨论】:

    • 但这仍然会给我 URL "localhost:1234/?Idtrips=0&page=5" 这就是我想要避免的。它应该像 new { page = 5 } 或 new { Idtrips = 1, page = 5 } 和内联。不在 Html.ActionLink 上使用 if 或 switch 语句
    • 您可能需要考虑使您的 idtrips 参数可以为空(并且在您的模型上可以为空)。这将为您提供您正在寻找的预期效果(即当为 null 时不显示您的 idtrips 参数,尽管它默认为 0,否则它会显示该参数)。
    • 我将它们更改为可以为空的值,它可以按我的意愿工作。感谢您的快速帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 2019-02-28
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多