2012-04-16 65 views
0

我在回發期間有一個ViewBag函數指針值丟失的問題。在回發後保留ViewBag值

我的網站有一個橫幅(局部視圖),我通過利用ViewBag函數指針指示我的客戶的狀態:

ViewBag.CustomerStatus= new Func<id, string>(GetCustomerStatus); 

(其中ID是我的客戶ID和返回的字符串它的返回狀態)

當我開始轉到使用橫幅局部視圖的其他頁面時,我鬆開了我的CustomerStatus ViewBag變量。我知道ViewBags只能「每頁」使用,但是我怎樣才能使我的客戶狀態功能可以在應用程序中的其他位置使用,而不會冗餘並重復使用ViewBag.CustomerStatus = new Func(GetCustomerStatus);在每一個ActionMethod調用?

是否有可能在Session/ViewState中存儲函數指針?安全嗎? 如何在回發期間訪問我的最新客戶狀態?

預先感謝您。

回答

1

我最終採取以下辦法......不用翻譯直接局部視圖

我改變它,所以它被稱爲通過控制器的操作方法。

我創建:

public PartialViewResult CustomerStatus() 
{ 
    ...here I called my private GetCustomerStatus methods 
    ViewBag.CustomerStatus = GetCustomerStatus(); 
    Return PartialView(" 
} 

所以現在不是單獨調用ViewBag函數指針,每當標題橫幅已被渲染,而不是@ Html.Partial(「BannerPartialView」)我叫我@Html .Action(CustomerStatus)方法返回相同的橫幅但客戶狀態變量可用。

希望它不會讓人困惑和幫助別人。

3

有一些關於這一點的事情,在體系結構上講,我錯了。你不應該傳遞函數調用到你的意見,你應該通過數據。你的方法違反了MVC所支持的「關注點分離」。

構建一個表示要顯示的數據的視圖模型,然後通過調用您的函數(最好從模型內部或從控制器(如果必須)調用)填充它。然後將模型傳遞給視圖,讓視圖擔心如何顯示數據。

如果您的每次調用都有重複的數據,您可以通過重寫OnActionExecuting方法將其添加到模型中,並在此時將值添加到模型(或ViewBag)中。

+0

是的,你是絕對正確的。 ViewBag函數指針確實破壞了整個圖層的分離邏輯,但我被分配了這個項目,它已經在這個地方實現了這些ViewBag控制器函數指針,所以我使用了這個流。 無論如何...橫幅局部視圖已經有一個模型,它從中拉取數據。我不認爲我可以用我自己的新模型取代它。我認爲沒有辦法將第二個模型傳遞給視圖,是嗎? 這就是爲什麼我通過會話指針會是最好的方法。你怎麼看 ? – Shenaniganz 2012-04-16 18:53:34

+0

那麼也許你最好的選擇就是把從函數指針返回的值填充到ViewBag中? – mgnoonan 2012-04-16 18:55:55