2017-05-19 43 views
1

我有我的頂部菜單欄與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字符串。但我想知道我在這裏做錯了什麼。以及如何通過將意見傳遞給對象來解決問題。

+1

你爲什麼不只是將模型傳遞給部分? –

+0

這部分視圖是顯示站點地圖,它可以通過查詢數據庫獲取模型數據。在正常情況下,它可以生成所有頁面。一般來說,唯一需要傳遞給局部視圖的數據是我當前的頁面,因此它將以不同的顏色顯示。但在某些特殊情況下,站點地圖中的鏈接需要路由對象(取決於當前視圖)。這就是我的問題所在。將路由對象傳遞給局部視圖時。部分中的ActionLink()無法正確顯示。其餘數據對這個局部視圖無用。 – Chris

+0

爲什麼?如果您已經在基於模型的主視圖中使用代碼,只需使用'@ Html.Partial(「TopNavBar」,Model)'將模型傳遞給partial,然後將以前使用的代碼移動到部分。但無論如何,你真的應該使用'@ Html.Action()'來調用返回菜單的一部分的'[ChildActionOnly]'方法。 –

回答

1

克里斯,一般來說,這翻譯長度將發生= 4的問題,當我們忘記了HTML屬性

我希望你正在使用的ActionLink的以下過載設置爲空值:

enter image description here

如果是這樣,請嘗試爲最終參數設置爲空,即IDictionary htmlAttribute爲null並且看看是否有效。

所以,你的代碼將看起來像:

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

希望這將有助於解決您的問題,請讓我知道你的想法或反饋

感謝 KARTHIK