【问题标题】:HtmlHelper MVC 5 F#HtmlHelper MVC 5 F#
【发布时间】:2014-09-15 20:20:40
【问题描述】:

我尝试在 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())

我已经尝试相应地使用它:

@using FSharpStore.WebUI.HtmlHelpers <div class="btn-group pull-right"> @Html.PageLinks(Model.PagingInfo, this.Url) </div>

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

有人在 F# 中成功完成 HtmlHelper 吗?我已经尝试在项目的不同部分使用过代码扩展,它们只是在工作。我认为剃须刀本身很特别。

【问题讨论】:

标签: asp.net-mvc razor f# html-helper


【解决方案1】:

您的代码是有效的 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)

还有 Razor 视图:

@using FsCsMvc41WeApp.Helpers
@{
    Layout = null;

}
<!DOCTYPE html>
<html>
<head>
    <title>Index</title>
</head>
<body>
    <div>
        @Html.sayHello("Nicolás")
    </div>
</body>
</html>

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-01-14
      • 2017-08-24
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2014-03-09
      相关资源
      最近更新 更多