2014-06-20 82 views
3

傳遞到詞典中的模型項的類型爲「System.Collections.Generic.Dictionary 2[CapacityPlanner2.Models.Segment, CapacityPlanner2.Models.Product]', but this dictionary requires a model item of type 'System.Collections.Generic.Dictionary 2 [System.Object的,System.Object的]MVC動態模型,以查看

我的視圖具有@model Dictionary<dynamic, dynamic>

我通過以下Dictionary<Project, Segment>

不應該那麼工作嗎?

我的部分觀點:

@model Dictionary<dynamic, Dictionary<dynamic, List<dynamic>>> 

我的主要觀點

@model Dictionary<dynamic, Dictionary<dynamic, Dictionary<dynamic, List<dynamic>>>> 


@foreach (var kvp in Model) 
{ 
    @Html.Partial("_part", kvp.Value) 
} 

我想補充的局部視圖,因爲我想重新使用它。但在此之前,一切正常。

+0

請你能添加相關的HTML/jQuery和你的模型和控制器代碼? – rhughes

+0

我一直在努力**很多**。我不認爲目前的MVC版本允許它。 –

+3

這是一個協變問題。因爲它們是不變的,所以你不能爲'Dictionary '傳遞'Dictionary '。當你定義你的字典時,你可以使用'Dictionary ',並且仍然創建它由'Project'鍵和'Segment'值組成,然後將它傳遞給你的視圖。但是,無論何時,如果您覺得需要使用動態,請退後一步,真正考慮是否應該這樣做。如果真的沒有其他辦法,那麼也許你必須這樣做,但這非常罕見。盡一切努力去強烈打字。 –

回答

0

正如在評論中提到的那樣,創建模型時必須通過dynamic類型。這是一個工作示例。但正如評論中也提到,請檢查你是否真的需要dynamic,可能是interfaced model就夠了。

public ActionResult Testing() 
    { 
     var data = new Dictionary<dynamic, Tuple<dynamic, dynamic>> 
     { 
      {1, new Tuple<dynamic, dynamic>(new Project{Name = "P1"}, new Segment{Id = "S1"})}, 
     }; 

     return View(data); 
    } 

    @foreach (var d in @Model) 
      { 
        var item1 = @d.Value.Item1 as Project; 
        var item2 = @d.Value.Item2 as Segment; 
        <p> @d.Key + ": " + @item1.Name + " - " + @item2.Id</p> 
      } 
0

是看來你只能申報

@Model dynamic 

,然後將其轉換爲任何