Mat*_*w H 2 .net c# model-view-controller asp.net-mvc f#
我有一个C#ASP.NET MVC项目,但我的控制器是用F#编写的.
由于某种原因,以下代码无法正常工作:
namespace MvcApplication8.Controllers
open System.Web.Mvc
[<HandleError>]
type ImageController() =
inherit Controller()
member x.Index (i : int) : ActionResult =
x.Response.Write i
x.View() :> ActionResult
Run Code Online (Sandbox Code Playgroud)
动作的参数似乎被忽略了......
结果出现此错误消息:
参数字典包含'MvcApplication8.Controllers.ImageController'中方法'System.Web.Mvc.ActionResult Index(Int32)'的非可空类型'System.Int32'的参数'i'的空条目.可选参数必须是引用类型,可空类型,或者声明为可选参数.
Run Code Online (Sandbox Code Playgroud)Parameter name: parameters
否则控制器工作正常.我知道很多人都写过F#MVC代码,所以我想出错的任何想法?
问题是控制器参数的名称需要与映射中指定的名称相匹配,该名称指定如何将URL转换为控制器调用.
如果您查看Global.asax.cs文件(您应该能够将其转换为F#),那么您会看到如下内容:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index",
id = UrlParameter.Optional } // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)
该名称id指定参数的预期名称,因此您需要调整F#代码以获取名为idthis 的参数:
member x.Index(id:int) =
x.ViewData.["Message"] <- sprintf "got %d" id
x.View() :> ActionResult
Run Code Online (Sandbox Code Playgroud)
Nullable<int>如果要使参数可选,可以使用类型.
对于一个习惯于F#提供的静态类型安全的程序员来说,ASP.NET MVC依赖于许多在编译时未检查的动态测试,这有点令人惊讶.我希望有一天,F#会有一些更好的Web框架:-).
| 归档时间: |
|
| 查看次数: |
4523 次 |
| 最近记录: |