Asp.net mvc HtmlHelper MVC 5 F#

Asp.net mvc HtmlHelper MVC 5 F#,asp.net-mvc,razor,f#,html-helper,Asp.net Mvc,Razor,F#,Html Helper,我曾尝试在F#中为MVC 5应用程序创建HtmlHelper,我的实现如下: namespace FSharpStore.WebUI.HtmlHelpers module PagingHelpers = type HtmlHelper with static member PageLinks(info: PagingInfo, url : UrlHelper) : MvcHtmlString = let pageUrl x = url.Action("List", x.

我曾尝试在F#中为MVC 5应用程序创建HtmlHelper,我的实现如下:

namespace FSharpStore.WebUI.HtmlHelpers

module PagingHelpers =
type HtmlHelper with
    static member PageLinks(info: PagingInfo, url : UrlHelper) : MvcHtmlString =
        let pageUrl x = url.Action("List", x.ToString())

        let sb = new StringBuilder()
        for i in 0..info.TotalPages do
            let tag = new TagBuilder("a") 
            tag.MergeAttribute("href", pageUrl(i))
            tag.InnerHtml <- i.ToString()
            if i = info.CurrentPage then
                tag.AddCssClass("selected")
                tag.AddCssClass("btn-primary")

            tag.AddCssClass("btn btn-default")
            sb.Append(tag.ToString()) |> ignore

        MvcHtmlString.Create(sb.ToString())
命名空间FSharpStore.WebUI.HtmlHelpers
模块分页帮助器=
键入HtmlHelper和
静态成员页面链接(信息:PaginInfo,url:UrlHelper):MvcHtmlString=
让pageUrl x=url.Action(“List”,x.ToString())
让sb=新的StringBuilder()
对于0中的i..info.TotalPages do
让标记=新标记生成器(“a”)
tag.MergeAttribute(“href”,页面URL(i))
tag.InnerHtml忽略
MvcHtmlString.Create(sb.ToString())
因此,我尝试使用它:

@使用FSharpStore.WebUI.HtmlHelpers
@页面链接(Model.pagininfo,this.Url)

代码不可编译,它会给我消息: “System.Web.Mvc.HtmlHelper”不包含“PageLinks”的定义,并且找不到接受“System.Web.Mvc.HtmlHelper”类型的第一个参数的扩展方法“PageLinks”(是否缺少using指令或程序集引用?)


有人在F#成功地完成了HtmlHelper吗?我曾尝试在项目的不同部分使用代码扩展,它们只是在工作。我觉得剃须刀本身很特别

我认为,为了使它作为静态扩展方法工作,您需要将它嵌套在具有
[]
属性的类型中。方法本身也应该用
[]
属性修饰。 另外,在您试图使用它的页面中,您是否在using语句中实际导入了您试图访问的模块?

您的代码是有效的F#扩展方法。但这只对F#可见。为了在C中使用扩展方法,必须使用“C方式”。因此,HtmlHelper代码:

namespace FsCsMvc41WeApp.Helpers
open System.Runtime.CompilerServices
open System.Web;
open System.Web.Mvc;

[<Extension>]
type MyHelpers = 
    [<Extension>]
    static member sayHello(helper : HtmlHelper, name: string) =
        new HtmlString("Hello " + name)
名称空间FsCsMvc41WeApp.Helpers
open System.Runtime.CompilerServices
开放系统.Web;
opensystem.Web.Mvc;
[]
类型MyHelpers=
[]
静态成员sayHello(助手:HtmlHelper,名称:string)=
新HtmlString(“你好”+姓名)
而剃须刀视图:

@using FsCsMvc41WeApp.Helpers
@{
    Layout = null;

}
<!DOCTYPE html>
<html>
<head>
    <title>Index</title>
</head>
<body>
    <div>
        @Html.sayHello("Nicolás")
    </div>
</body>
</html>
@使用FsCsMvc41WeApp.Helpers
@{
布局=空;
}
指数
@Html.sayHello(“尼古拉斯”)
看一看。