将数据传递给局部视图ActionLink

时间:2017-05-19 20:33:33

标签: asp.net-mvc razor

我的顶级菜单栏中包含actionlink()列表。其中一个将数据传递给控制器​​。

int? partCategoryID = Model.SelectedPartCategory == null ? -1 : Model.SelectedPartCategory.PartCategoryID;
@Html.ActionLink("New Part", "NewPart", new { PartCategoryID = partCategoryID })

工作正常。然后我发现动作链接的数量增长得太快了。所以我正在尝试构建一个站点地图。并且视图会将所有actionlink数据传递给局部视图。部分处理所有顶级菜单栏。

在原始视图中(简化):

Dictionary<string, object> actionRouteValueDict = new Dictionary<string, object>();
int? partCategoryID = Model.SelectedPartCategory == null ? -1 : Model.SelectedPartCategory.PartCategoryID;
actionRouteValueDict.Add("NewPart", new { PartCategoryID = partCategoryID });
@Html.Partial("TopNavBar", new ViewDataDictionary { {"Routes", actionRouteValueDict} });    

在局部视图中,它是“做同样的事情”:

Dictionary<string, object> actionRouteValueDict = (Dictionary<string, object>)ViewData["Routes"];
@Html.ActionLink("New Part", "NewPart", actionRouteValueDict["NewPart"])

但不知何故,新@Html.Action无法正确处理对象,我可以调试并看到actionRouteValueDict["NewPart"]仍然正确({PartCategory = -1}),但ActionLink已翻译为{{1} }}。 我知道我可以传递比对象更安全的东西,比如html字符串。但我想知道我在这里做错了什么。以及如何通过视图传递对象来解决。

1 个答案:

答案 0 :(得分:1)

Chris,一般来说,当我们忘记为Html属性设置null时,会发生对Length = 4问题的翻译

我希望你使用下面的ActionLink重载:

enter image description here

如果是这样,尝试为最终参数设置null,即 IDictionary htmlAttribute为null ,看看它是否有效。

所以你的代码看起来像是:

@Html.ActionLink("New Part", "NewPart", actionRouteValueDict["NewPart"], null)

希望这有助于解决您的问题,请让我知道您的想法或反馈

由于 KARTHIK