我有我的頂部菜單欄與actionlink()列表。其中一人將數據傳遞給控制器。將數據傳遞到局部視圖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
翻譯爲Length=4
。 我知道我可以傳遞比對象更安全的東西,比如html字符串。但我想知道我在這裏做錯了什麼。以及如何通過將意見傳遞給對象來解決問題。
你爲什麼不只是將模型傳遞給部分? –
這部分視圖是顯示站點地圖,它可以通過查詢數據庫獲取模型數據。在正常情況下,它可以生成所有頁面。一般來說,唯一需要傳遞給局部視圖的數據是我當前的頁面,因此它將以不同的顏色顯示。但在某些特殊情況下,站點地圖中的鏈接需要路由對象(取決於當前視圖)。這就是我的問題所在。將路由對象傳遞給局部視圖時。部分中的ActionLink()無法正確顯示。其餘數據對這個局部視圖無用。 – Chris
爲什麼?如果您已經在基於模型的主視圖中使用代碼,只需使用'@ Html.Partial(「TopNavBar」,Model)'將模型傳遞給partial,然後將以前使用的代碼移動到部分。但無論如何,你真的應該使用'@ Html.Action()'來調用返回菜單的一部分的'[ChildActionOnly]'方法。 –