Asp.net mvc 将数据传递到部分视图ActionLink

Asp.net mvc 将数据传递到部分视图ActionLink,asp.net-mvc,razor,Asp.net Mvc,Razor,我的顶部菜单栏中有actionlink()的列表。其中一个将向控制器传递数据 int? partCategoryID = Model.SelectedPartCategory == null ? -1 : Model.SelectedPartCategory.PartCategoryID; @Html.ActionLink("New Part", "NewPart", new { PartCategoryID = partCategoryID }) 它工作得很好。然后我发现ActionLink

我的顶部菜单栏中有actionlink()的列表。其中一个将向控制器传递数据

int? partCategoryID = Model.SelectedPartCategory == null ? -1 : Model.SelectedPartCategory.PartCategoryID;
@Html.ActionLink("New Part", "NewPart", new { PartCategoryID = partCategoryID })
它工作得很好。然后我发现ActionLink的数量增长得太快了。所以我正试图建立一个网站地图。视图会将所有actionlink数据传递给局部视图。部分处理所有顶部菜单栏

在原始视图中(简化):

Dictionary actionRouteValueDict=new Dictionary();
智力?partCategoryID=Model.SelectedPartCategory==null-1:Model.SelectedPartCategory.PartCategoryID;
actionRouteValueDict.Add(“NewPart”,new{PartCategoryID=PartCategoryID});
@Html.Partial(“TopNavBar”,新ViewDataDictionary{{“Routes”,actionRouteValueDict});
从局部来看,这是“做同样的事情”:

Dictionary actionRouteValueDict=(Dictionary)ViewData[“Routes”];
@ActionLink(“新部件”、“新部件”、actionRouteValueDict[“新部件”])
但不知何故,新的
@Html.Action
无法正确处理对象,我可以调试并看到
actionRouteValueDict[“NewPart”]
仍然正确
({PartCategory=-1})
,但
ActionLink
已翻译为
Length=4

我知道我可以传递比object更安全的东西,比如html字符串。但我想知道我做错了什么。以及如何通过在视图中传递对象来解决问题。

Chris,当我们忘记为Html属性设置null时,通常会出现转换为Length=4的问题

我希望您正在使用以下ActionLink过载:

如果是这样,请尝试将最后一个参数设置为null,即IDictionary htmlAttribute设置为null,并查看是否有效

所以您的代码看起来像:

@Html.ActionLink("New Part", "NewPart", actionRouteValueDict["NewPart"], null)
希望这将有助于解决您的问题,请让我知道您的想法或反馈

谢谢
Karthik

为什么不将模型传递给partial?此partial视图用于显示站点地图,它可以通过查询数据库获取模型数据。在正常情况下,它可以生成所有页面。通常,需要传递到局部视图的唯一数据是我的当前页面,因此它将以不同的颜色显示。但在某些特殊情况下,站点地图中的链接需要路由对象(取决于当前视图)。这就是我的问题。将管线对象传递到局部视图时。分部中的ActionLink()无法正确显示它。其余的数据对于这个局部视图没有用处。为什么?如果您已经在基于模型的主视图中使用了代码,只需使用
@Html.Partial(“TopNavBar”,model)
将模型传递到Partial,然后将您以前使用的代码移动到Partial。但在任何情况下,都应该使用
@Html.Action()
调用
[ChildActionOnly]
方法,该方法返回菜单的一部分。
Dictionary<string, object> actionRouteValueDict = (Dictionary<string, object>)ViewData["Routes"];
@Html.ActionLink("New Part", "NewPart", actionRouteValueDict["NewPart"])
@Html.ActionLink("New Part", "NewPart", actionRouteValueDict["NewPart"], null)