2012-06-13 140 views
4

我正在使用ASP.NET MVC 4(RC)視圖的自定義DisplayModes來允許自定義視圖內容。爲什麼ViewContext.DisplayMode.DisplayModeId爲空?

我給這家移動唯一的應用程序規則非常簡單,定義了基於用戶的內部輪廓/會話配置:

DisplayModeProvider.Instance.Modes.Insert(0, 
    new DefaultDisplayMode("Tablet") 
    { 
     ContextCondition = (context => 
     { 
      if (SessionManager.Current == null) 
       return false; // assume phone initially 

      if (SessionManager.Current.Session.ScreenWidth > 600) 
       return true; 

      return false; 
     }) 
    }); 

DisplayModeProvider.Instance.Modes.Insert(0, 
    new DefaultDisplayMode("Phone") 
    { 
     ContextCondition = (context => 
     {       
      if (SessionManager.Current == null || 
       SessionManager.Current.Session.ScreenWidth <= 600) 
       return true; // assume phone initially 

      return false; 
     }) 
    }); 

我現在可以創建使用xxxx.Phone.cshtml和xxxx.Tablet意見。 CSHTML。呈現正確的視圖。

但是,ViewContext.DisplayMode.DisplayModeId總是回到空白。例如,在下面的頁面我回顯的顯示模式和硬編碼的ID,告訴其觀點被渲染:

<div>@Model.Distance - @ViewContext.DisplayMode.DisplayModeId - Tablet</div> 

我看到硬編碼的平板電腦(或手機)的值,但DisplayModeId始終是空白。

應該設置這個值嗎?我認爲這在以前的MVC 4測試版中有效,但我不是100%確定的。

任何想法?

回答

0

當我沒有記錯的時候,當ContextCondition設置爲null時,可能會發生這種情況。 發生這種情況時,不考慮所有其他DisplayModeProvider。

你確定ContextCondition沒有返回null嗎?也許是因爲委託內部存在異常?您是否嘗試過返回固定值(用於測試目的?)

+0

做了一些更多的測試。因此無法確認其與最新的MVC4版本。工作是否像預期的那樣。我可以確認的是,第一個帶ContextCondition = null的DisplayMode被返回,獨立於其他。 – EricSch

0

使用ViewContext.DisplayMode.DisplayModeId獲取模式是不實際的只有當您的視圖命名爲ViewName.Table.cshtml時才能使用該模式如果只有您的主模塊是_Master.Tablet.cshtml ,該屬性將返回空的結果。

所以幾乎將只得到,如果你的觀點是正確的模式,這使得獲取模式毫無意義的正確結果。