【问题标题】:How to pass multiple parameters (some complex objects) with Html.ActionLink如何使用 Html.ActionLink 传递多个参数(一些复杂的对象)
【发布时间】:2012-10-25 20:57:04
【问题描述】:

我正在使用 .net 4.0 中的 MVC。我有一个基本的 Html.ActionLink,我希望将多个参数传递给控制器​​/动作。

每次我调试 ActionResult 时,只有一个参数通过,另一个为空(取决于哪个是第一个)。现在我知道我可以传入复杂的对象,因为我可以让“联盟”对象通过。但是,我不确定为什么在任何时候只有一个参数可以通过。

View 中的代码:(不要因为 ViewBag 而骚扰我。我知道它不流行。另外,League 是一个复杂的对象)

@Html.ActionLink("Sort By WeeK", "Sort", "Schedule",
                 new { league = ViewBag.League, sortType = "Week" }, null)

Controller 中的代码:(这里没有惊喜)

public ActionResult Sort(League league, string sortType)
{
    //Do some stuff here
    return View("Schedule");
}

我猜答案将围绕路由展开。这让我想到了第二个问题。如何在不不断添加新地图路由的情况下让这种类型的 ActionLink(动作/控制器/复杂和简单对象的集合)工作。是否有我可以添加的通用/通配符 RouteMap,这样我就不必不断地将解剖学上相同的路由图添加到 global.asax。或者,也许我希望传递给 Action 的对象类型具有一定的灵活性,因此我无法预定义确切的签名。

我看过多篇关于这个主题的帖子,但没有一个回答我的问题。

【问题讨论】:

  • 很奇怪。在控制器的操作中尝试 FormCollection 并查看它是否返回多个键。最坏的情况,您可以将其转换为表单并提交隐藏的 HTML。
  • 当你说“哪个是第一个”时,你是指方法签名中的第一个还是链接的URL中的第一个?生成的 URL 是什么样的?

标签: asp.net-mvc razor actionlink


【解决方案1】:

我认为它可能会因为 null 参数而感到困惑。试试这个:

@Html.ActionLink("Sort By WeeK", actionName:"Sort", controllerName: "Schedule", routeValues: new { league = ViewBag.League, sortType = "Week" }, htmlAttributes:null)

【讨论】:

  • 感谢您的反馈。我将对此进行测试并回复您。随着应用范围的扩大,League 对象成为控制器的公共属性,因此我不再需要传入它。下次我必须传入多个参数并发布结果时,我会尝试您的建议这里。星期五快乐。
  • 很抱歉回复晚了,但我刚看到这个并想我还需要确认。这个建议奏效了。谢谢。
【解决方案2】:

我尝试了很多方法,但没有人不帮助我,最终我自己解决了这个问题,只需将你的对象“解包”到来自对象的变量上,就像这样:

@{ var sendObject = (MyObject) ViewData["SendObject"]; }
...
@Html.ActionLink("Description", "MyActionName", "MyController", new { sendObject.var1, sendObject.var2, sendObjec.var3, sortType = "Week" }, new { @style = "color: white" })

控制器:

public ActionResult MyActionName(MyObject sendObject, string sortType)
{
...
}

框架自己会绑定你的对象SendObject

【讨论】:

    【解决方案3】:

    这样做:

    VIEW:
    @Html.ActionLink("Link text", "Action name", "Controller name",
                            new { paramName1 = @modelDataItem.value, paramName2 = @modelDataItem.value}, null)
    
    CONTROLLER:
    public ActionResult ActionName(string paramName1 , string paramName2 )
    

    注意:确保控制器动作上的参数名称与动作链接中使用的参数名称相同。 如果这些值未传递给操作参数,则检查视图的模型是否包含您要查找的值。也许它从未发送到视图。

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 2012-09-14
      • 2012-10-24
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      相关资源
      最近更新 更多