6

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

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

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

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

控制器中的代码:(这里没有惊喜)

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

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

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

4

3 回答 3

4

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

@Html.ActionLink("Sort By WeeK", actionName:"Sort", controllerName: "Schedule", routeValues: new { league = ViewBag.League, sortType = "Week" }, htmlAttributes:null)
于 2012-10-25T21:50:35.080 回答
0

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

@{ 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

于 2016-06-03T20:52:25.837 回答
0

只需这样做:

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 )

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

于 2017-03-05T14:47:34.967 回答