html帮助器是干什么的,Razor:声明性HTML帮助器

Razor:声明性HTML帮助器

我正在尝试编写一个简单的声明性html助手:

@helper Echo(string input) {

@input

}

如果将帮助器嵌入到要使用的页面中,它会很好地工作。 但是,如果我将其移到单独的2752128223533533335552文件中并将该文件放置在2752128223533335335553目录中,则由于无法找到帮助程序,因此无法再编译我的视图。 根据Scott Gu的有关Razor的博客文章,它应该可以工作。

我究竟做错了什么?

7个解决方案

49 votes

该ScottGu帖子中描述的2752128599141141647360位置在MVC 3 RTM中不起作用。 在撰写本文时,这是一个我们要抛弃的设计思想,但最终我们无法实现它。

将您的助手放入App_Code可以工作,但是有一些限制会影响某些MVC方案(例如:无法访问标准MVC Html.助手)

marcind answered 2020-02-17T22:09:17Z

36 votes

简单的解决方法:

在每个助手中添加参数WebViewPage页面。

App_Code \ Test.cshtml:

@using System.Web.Mvc.Html

@using System.Web.Mvc

@helper HelloWorld(WebViewPage page)

{

@page.Html.Label("HelloWorld")

}

该助手在任何页面中的用法:

@Test.HelloWorld(this)

Serj-Tm answered 2020-02-17T22:09:50Z

9 votes

正如marcind所说,由于我们的编译模型存在某些限制,我们无法支持~/Views/Helpers的位置。

我们正在为声明性HTML助手开发一个更好的解决方案,但不会实现v1。 对于v1,我们有两种解决方案:

App_Code(如Marcin所述,存在一些问题,但确实可以工作)

David Ebbo(团队成员)有一个Visual Studio加载项,可以将它们编译到您的DLL中

Andrew Stanton-Nurse answered 2020-02-17T22:10:23Z

7 votes

在App_Code中,@ helper需要此才能正常工作:

// These are important for `Html.RouteLink` and such.

@using System.Web.Mvc;

@using System.Web.Mvc.Routing;

@using System.Web.Mvc.Html;

@using System.Web.Mvc.Razor;

@helper SomeHelper()

{

// Get page and pull helper references from it.

var wvp = PageContext.Page as System.Web.Mvc.WebViewPage;

var Url = wvp.Url; // UrlHelper access

var Html = wvp.Html; // HtmlHelper access

var ViewBag = wvp.ViewBag;

// Helper code comes here...

}

CodeAngry answered 2020-02-17T22:10:43Z

6 votes

我也遵循Scott博客中列出的步骤,也无法使其正常运行。

我进行了一些搜索,找到了以下链接:[http://dotnetslackers.com/articles/aspnet/Experience-ASP-NET-MVC-3-Beta-the-Razor-View-Engine.aspx#s19-create-custom- 辅助方法]

遵循了步骤,它正在工作。 关键似乎是App_Code文件夹,以及调用帮助程序时使用文件名点帮助程序名称。

Brian Ball answered 2020-02-17T22:11:13Z

4 votes

我知道这已经晚了……但是,将当前的View传递给helper函数。 从视图中,您可以访问HTML和帮助器功能。

Jim Shaw answered 2020-02-17T22:11:33Z

3 votes

对CodeAngry答案的另一种解释是,这使文件中每个方法的助手成为可能。

@using System.Web.Mvc;

@using System.Web.Mvc.Html;

@using System.Web.Mvc.Routing;

@using System.Web.Mvc.Razor;

@functions {

private static WebViewPage page { get { return PageContext.Page as WebViewPage; } }

private static System.Web.Mvc.HtmlHelper Html { get { return page.Html; } }

private static UrlHelper Url { get { return page.Url; } }

private static dynamic ViewBag { get { return page.ViewBag; } }

}

Ryan Buddicom answered 2020-02-17T22:11:53Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值