从内联助手调用扩展助手 - 如何?
Posted
技术标签:
【中文标题】从内联助手调用扩展助手 - 如何?【英文标题】:Calling extension helpers from inline helpers - how? 【发布时间】:2011-06-08 08:27:33 【问题描述】:我读到了这个[useful article],它说我可以通过将它们放在特殊文件夹 App_Code 的视图中来创建一个内联助手库。当我将我的 @helper
函数移到那里时,我停止了对扩展助手的调用。我读到[in this SO article] 有一个问题,因为@helper
s 是静态的,但我的扩展不是...我尝试了两种不同的方法,但无法使其工作。它无法识别我的扩展助手的存在。
'System.Web.WebPages.html.HtmlHelper' does not contain a definition for 'Image'
我的扩展助手名为“Image”。我应该寻找什么?
【问题讨论】:
看看您尝试了哪两种方法会很有帮助。您是否像这样使用了帮助程序的完整路径:@CustomHelpers.Truncate(ViewBag.Message, 8) 在这种情况下,您不需要 CustomHelpers.cshtml 文件的“使用”? 【参考方案1】:当您在 razor 视图中编写 Helperextension 时。 您需要像 FileName.Method 一样调用它。
例如,您在 app_code 中有 CustomHelpers.cshtml 文件,并且您有一个方法
@helper TruncateString(string input, int length)
if (input.Length <= length)
@input
else
@input.Substring(0, length)<text>...</text>
你可以从 index.cshtml 中调用它
@CustomHelpers.TruncateString("Example", 8);
【讨论】:
【参考方案2】:例如,以下代码使用帮助程序库中的“RenderPage”函数:
@helper GetSection(string sectionName, string sectionTitle, string sectionFileName)
<div id="@sectionName">
<h1>@sectionTitle</h1>
@System.Web.WebPages.WebPageContext.Current.Page.RenderPage("~/Views/Shared/MySections/" + @sectionFileName)
</div>
它演示了如何检索“当前页面”(上下文相关)实例。
此代码在您自己的“公共库”Razor 帮助文件 (“.cshtml”) 中运行良好,该文件位于项目的“*app_code*”子文件夹中。
【讨论】:
【参考方案3】:好的,我的问题与命名空间有关...所以我在 \Views\Shared\HtmlHelpers.cs 中:
public static class Html
public static MvcHtmlString Image(this HtmlHelper helper, string src, object htmlAttrs = null)
我通常像这样从我的页面访问:
@Html.Image("/path/to/image")
在 App_Code\Helpers.cshtml 中:
@helper AddButton(string path)
var Html = ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html;
@Html.Image(path);
但 Intellisense 会在“图像”下划线并抱怨:
'System.Web.Mvc.HtmlHelper<object>' does not contain a definition for 'Image'
and no extension method 'Image' accepting a first argument of type
'System.Web.Mvc.HtmlHelper<object>' could be found (are
you missing a directive or an assembly reference?)
原因似乎是 Helpers.cshtml 需要有 @using
作为命名空间...在我的常规页面上,命名空间包含在我的 web.config 中,但此页面似乎不受该机制的约束
【讨论】:
以上是关于从内联助手调用扩展助手 - 如何?的主要内容,如果未能解决你的问题,请参考以下文章
thymeleaf CSS内联表达式前端css里面怎么获取后台模板值