Asp.net mvc 3 在F中设置ViewBag动态对象的属性#
我在C#中有这个动作方法: 以及此视图(Index.cshtml):Asp.net mvc 3 在F中设置ViewBag动态对象的属性#,asp.net-mvc-3,f#,razor,Asp.net Mvc 3,F#,Razor,我在C#中有这个动作方法: 以及此视图(Index.cshtml): @ViewBag.Message 这将在页面上生成预期的“Hello” 我想用F#做控制器。我试过了 type MainController() = inherit Controller() member x.Index() = x.ViewBag?Message <- "Hello" x.View() 类型MainController()= 继承控制器() 成员x.索引()= x、 查看包
@ViewBag.Message
这将在页面上生成预期的“Hello”
我想用F#做控制器。我试过了
type MainController() =
inherit Controller()
member x.Index() =
x.ViewBag?Message <- "Hello"
x.View()
类型MainController()=
继承控制器()
成员x.索引()=
x、 查看包?信息而不是
x?ViewBag <- "Hello"
x?ViewBag属性ViewBag
只是一个包装器,它将ViewData
集合公开为dynamic
类型的属性,以便可以从C#动态访问它(使用属性集语法)。您可以使用基于DLR的?
实现来实现这一点(请参见),但定义直接将数据添加到ViewDataDictionary
的?
运算符更容易(该运算符由ViewData
属性公开):
let(?仅提供一个类似的示例,使用以下控制器方法:
public IActionResult Welcome(string name, int numTimes = 1)
{
ViewData["Message"] = "Hello " + name;
ViewData["NumTimes"] = numTimes;
return View();
}
转换为F#:
#Tomas在适当的时候给予赞扬,我使用您的F#空Web模板(如中所述)在一分钟内生成了此代码(但问题确实出现在实际项目中)。我还需要为TempData提供此代码,因此将第一个参数更改为(dictionary:IDictionary)
你能详细说明F#如何知道在哪里拆分运算符吗?有(这不是一个通用功能-F#编译器处理)似乎很奇怪。谢谢。我已经这样做了,但它仍然会生成“找不到方法或对象构造函数'op#u dynamicasignment'。我已经编辑了这个问题以包含这个建议。
x?ViewBag <- "Hello"
x.ViewBag?Message <- "Hello"
let (?<-) (viewData:ViewDataDictionary) (name:string) (value:'T) =
viewData.Add(name, box value)
x.ViewData?Message <- "Hello"
public IActionResult Welcome(string name, int numTimes = 1)
{
ViewData["Message"] = "Hello " + name;
ViewData["NumTimes"] = numTimes;
return View();
}
member this.Welcome (name : string, num_times : int) =
this.ViewData.Add("Message", box ("Hello " + name))
this.ViewData.Add("NumTimes", box num_times)
this.View()