Asp.net mvc 将数据传递到部分视图ActionLink
我的顶部菜单栏中有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
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)