2011-06-02 32 views
3

這是事情。我有一個MVC Action,並且在那個動作中,我已經應用了一個自定義的ActionFilterAttribute來實現反序列化。現在,我想要做的是根據在該視圖中設置的ViewBag.Title設置一些標題。如何在基礎視圖設置ViewBag.Title後訪問它?

我已經試過包裹的ViewResult在我自己的,並重寫的ExecuteReuslt但ViewBag始終是空:-(。

這甚至可能或者根本一旦執行_layout的MVC引擎重置ViewBag ?

更新:。 讓我發佈一些代碼示例,以更清楚我想做的事我有一個電子郵件服務,在那裏我使身體從一個MVC視圖所以我的觀點是這樣的:

@{ViewBag.Title = "EventCreated";} 

Something that ressembles an email message here. 

現在我有一個控制器,與看起來像這樣的動作:

public ActionResult HelloWorld(MailView<HelloWorldMessage> msg) 
     { 
      Response.Headers["subject"] = "Test subject"; 

      return View(msg); 
     } 

我要作出這樣的頭[「主題」]聲明看起來像Response.Headers [「主題」] = ViewBag。標題;我希望能夠讓視圖認爲它正在處理一個正常的網頁。

我使用ActionFilterAttribute嘗試和壓倒一切的OnResultExecuted,但不能讓它開始工作。

一個可能的選項是將其設置佈局頁面上,實際上根據跟蹤其佈局中使用一定的標準。這樣我仍然可以讓Reponse的東西遠離我的視野,但使它變得相當乾淨。你怎麼看?

感謝, 安澤

+0

我很困惑,我們可以看到一些代碼,指出你要完成的事情? – slandau 2011-06-02 15:51:48

+0

好吧,我已經添加了一個例子,希望更清楚。更好? – 2011-06-02 18:52:49

+0

如果我正確認識你,你想從視圖本身更新ViewBag? – slandau 2011-06-02 18:54:52

回答

3

試試這個 - 爲什麼這一切雖然分配視圖結果

 
var output = View(msg); 
//do your other viewbag stuff here 
return output; 

的輸出 - 當你說:「我沒有按照我想要做的是能夠讓View認爲它正在處理一個正常的網頁。「

編輯: 爲什麼不通過輔助方法在你的視圖中設置? ALA

 
@{ 
    SetTitle("Home Page"); 
} 


 
@functions { 
    public void SetTitle(string title) 
    { 
     ViewBag.Title = title; 
     Response.Headers.Add("title", title); 
    } 

} 

+0

不,這不起作用。我試過了,但是如果我沒有記錯的話,視圖不會被執行直到結果被渲染。我會嘗試另一種方法。 – 2011-06-03 07:55:08

+0

啊的確..看到我上面的編輯。 – 2011-06-03 14:30:46

+0

最後,這是我採取的方法。 – 2011-06-27 11:06:18

相關問題