Asp.net mvc 如何使用Html.ActionLink传递多个参数(一些复杂对象)

Asp.net mvc 如何使用Html.ActionLink传递多个参数(一些复杂对象),asp.net-mvc,razor,actionlink,Asp.net Mvc,Razor,Actionlink,我正在使用.NET4.0中的MVC。我有一个基本的Html.ActionLink,我希望将多个参数传递给控制器/动作 每次调试ActionResult时,只有一个参数通过,另一个参数为null(取决于哪个是第一个)。现在我知道我可以通过复杂的对象,因为我可以通过“联盟”对象。然而,我不确定为什么在任何时候只有我的一个参数能够通过 视图中的代码:(不要为ViewBag骚扰我。我知道它不受欢迎。而且,联盟是一个复杂的对象) 控制器中的代码:(这里没有意外) 我猜答案将围绕路由而定。这就引出了我的第二

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

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

视图中的代码:(不要为ViewBag骚扰我。我知道它不受欢迎。而且,联盟是一个复杂的对象)

控制器中的代码:(这里没有意外)

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


我已经看过多篇关于这个主题的文章,但没有一篇回答我的问题。

我认为可能会因为null参数而变得混乱。试试这个:

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

我尝试了很多方法,但没有人帮我,最终我自己解决了问题,只需从object中“解包”对象变量,如下所示:

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

只需执行以下操作:

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 )
注意:确保控制器操作上的参数名称与操作链接中使用的参数名称相同。
如果未将值传递到操作参数,则检查视图的模型是否包含您要查找的值。也许它从未被发送到视图。

奇怪。在控制器的操作中尝试FormCollection,并查看它是否返回多个键。最坏的情况是,senario你可以将它转换成一个表单并提交隐藏的HTML。当你说“哪一个是第一个”时,你是指方法签名中的第一个还是链接URL中的第一个?生成的URL看起来像什么?感谢您的反馈。我会测试一下,然后再给你回复。随着应用程序范围的扩大,League对象成为控制器的公共财产,因此我不再需要传递它。下次我必须传入多个参数并将结果发布在此处时,我将尝试您的建议。星期五快乐。很抱歉回复晚了,但我刚刚看到了这一点,我想我还欠一份确认书。这个建议奏效了。谢谢
public ActionResult MyActionName(MyObject sendObject, string sortType)
{
...
}
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 )