2012-02-22 64 views
2

我想從頁面傳遞一些參數(幾個字符串)到要在主頁面中呈現的部分視圖。爲此,我傳遞了一個匿名類型的對象,它不斷給我一個RuntimeBinderException。鑑於我所嘗試過的,我並不感到驚訝得到錯誤,但我不知道還有什麼要嘗試。如何訪問傳入部分視圖的匿名類型對象?

查看\首頁\ PageWithPartialView.cshtml

@Html.Partial("DynamicPartialView", new { paramFromPageToPartialView = "value" }) 

視圖\共享\ DynamicPartialView.cshtml

@model dynamic // Doesn't make a difference 

@{ 
    // This is where I need to access and display the parameters 
    // passed from the main page 

    // Throws RuntimeBinderException 
    // Cannot apply indexing with [] to an expression of type 'object' 
    var try1 = Model["paramFromPageToPartialView"]; 

    // Throws RuntimeBinderException 
    // 'object' does not contain a definition for 'paramFromPageToPartialView' 
    var try2 = Model.paramFromPageToPartialView; 
} 

如果局部視圖不這樣做的方式,我開放。部分視圖有幾百行代碼可以生成,所以自定義的HtmlHelpers對我來說似乎不易處理。

+1

兩個代碼都在同一個程序集中,出於興趣嗎? – 2012-02-22 20:05:50

+0

我這麼認爲......第一個位於Views \ Home \中,另一個位於Views \ Shared \中。部分視圖中會發生異常。 – 2012-02-22 20:09:20

+0

所以他們都在同一個項目中?嗯。如果他們在不同的程序集中,我可以理解它。我不是一個MVC的人......你有什麼可以強迫他們「早」編譯的嗎? (我不知道MVC中的生命週期是什麼)這將確保它們真的在同一個程序集中。 – 2012-02-22 20:13:36

回答

3

ViewBag旨在解決這類問題。而不是消耗在部分paramFromPageToPartialView從模式,消耗它從ViewBag

查看\首頁\ PageWithPartialView.cshtml

@{ViewBag.paramFromPageToPartialView = "value";} 
@Html.Partial("DynamicPartialView") 

查看\共享\ DynamicPartialView.cshtml

@model dynamic // Doesn't make a difference 

@{ 
    var try3 = ViewBag.paramFromPageToPartialView; 
} 
+0

賓果!我很確定我錯過了一些東西......謝謝! – 2012-02-22 20:27:04

+0

這對我目前的情況有很大的幫助,我反覆渲染了一個略有不同類型的局部視圖,無法重構基礎類。我[最終用反射](http://stackoverflow.com/a/31306368/957950),但如果團隊的其他成員完全知道.NET MVC,就會使用它。 – brichins 2015-07-09 01:03:07