我在 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# 代码示例,但没有看到比几页描述和许多行代码更短的内容。对于这个属性“设置者”来说,它们似乎太笼统了。
The ViewBag
属性只是一个暴露的包装器ViewData
集合作为类型的属性dynamic
,以便可以从 C# 动态访问它(使用属性集语法)。你可以使用实现?
基于 DLR 来做到这一点(请参阅SO 的讨论 https://stackoverflow.com/questions/5057672/looking-for-robust-general-op-dynamic-implementation),但更容易定义?
直接添加数据的运算符ViewDataDictionary
(这是由ViewData
财产):
let (?<-) (viewData:ViewDataDictionary) (name:string) (value:'T) =
viewData.Add(name, box value)
那么你应该能够写
x.ViewData?Message <- "Hello"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)