Asp.net-Mvc-3
在 F# 中設置 ViewBag 動態對象的屬性
我在 C# 中有這個動作方法:
public ActionResult Index() { ViewBag.Message = "Hello"; return View(); }這個視圖(Index.cshtml):
<h2>@ViewBag.Message</h2>這會在頁面上產生預期的“Hello”。
我想在 F# 中做控制器。我試過了
type MainController() = inherit Controller() member x.Index() = x.ViewBag?Message <- "Hello" x.View()這會產生錯誤消息“找不到方法或對象建構子’op_DynamicAssignment’”。
我查看了一些用於動態運算符的 F# 程式碼範例,但我看不到任何短於幾頁描述和多行程式碼的內容。對於這個屬性“setter”來說,它們似乎太籠統了。
該
ViewBag屬性只是一個將ViewData集合公開為 type 屬性的包裝器dynamic,因此可以從 C# 動態訪問它(使用屬性集語法)。您可以使用?基於 DLR 的實現來做到這一點(請參閱SO 上的討論),但更容易定義?將數據直接添加到的運算符ViewDataDictionary(由ViewData屬性公開):let (?<-) (viewData:ViewDataDictionary) (name:string) (value:'T) = viewData.Add(name, box value)然後你應該可以寫
x.ViewData?Message <- "Hello"