我正在尝试编写一个简单的声明性html帮助器:
@helper Echo(string input) {
@input
}
Run Code Online (Sandbox Code Playgroud)
如果我将它嵌入我想要使用它的页面,帮助程序工作正常.但是如果我将它移动到一个单独的.cshtml文件并将该文件放在~/Views/Helpers目录中,我的视图就不能再编译了,因为找不到帮助器.根据Scott Gu 关于Razor的博客文章,它应该有效.
我究竟做错了什么?
我创建了一个局部视图,无法访问HTML Helpers的Html命名空间.它在主视图中可用.我错过了什么吗?

编辑:我应该提到我正在使用ASP.NET MVC 5.
我正在用ASP NET MVC 3和Razor创建一个帮助器来显示我的网格
@helper ListaPessoa(IEnumerable<TesteHelpersMV3.Models.PessoaModel> listaPessoa)
{
<table>
<tr>
<th></th>
<th>Nome</th>
<th>Endereco</th>
<th>DataNascimento</th>
</tr>
@foreach (var item in listaPessoa)
{
<tr>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Nome }) |
@Html.ActionLink("Details", "Details", new { id = item.Nome }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Nome })
</td>
<td>@item.Nome</td>
<td>@item.Endereco</td>
<td>@item.Cidade</td>
</tr>
}
</table>
}
Run Code Online (Sandbox Code Playgroud)
但是Razor无法找到@ Html.ActionLink并发生以下错误
编译器错误消息:CS1061:'System.Web.WebPages.Html.HtmlHelper'不包含'ActionLink'的定义,也没有扩展方法'ActionLink'接受类型'System.Web.WebPages.Html.HtmlHelper'的第一个参数可以找到(你错过了使用指令或程序集引用吗?)
怎么了??? 如何解决这个问题呢??
谢谢
莱安德罗普拉多
我在我的MVC项目的App_Code文件夹中创建了一个全局.cshtml Razor文件来声明@helper函数.问题是我无法在辅助函数中使用Html.ActionLink(或其他扩展).我试图通过@using导入类,但是没有用.有任何想法吗?
我有一个MVC4项目,我正在尝试创建一个帮助器.我添加了一个名为"App_Code"的文件夹,在该文件夹中我添加了一个名为MyHelpers.cshtml的文件.以下是该文件的全部内容:
@helper MakeButton(string linkText, string actionName, string controllerName, string iconName, string classes) {
<a href='@Url.Action(linkText,actionName,controllerName)' class="btn @classes">Primary link</a>
}
Run Code Online (Sandbox Code Playgroud)
(我知道有一些未使用的参数,我会在我修复之后再找到它们)
我"清理"并构建解决方案,没有错误.
在使用帮助程序的页面中,我添加了此代码.
@MyHelpers.MakeButton("Back","CreateOffer","Merchant","","btn-primary")
Run Code Online (Sandbox Code Playgroud)
当我尝试运行该项目时,我收到以下错误:
编译器错误消息:CS0103:当前上下文中不存在名称"Url"
我似乎找不到写这个的正确方法 - 我做错了什么?与我在网上看到的例子相比,它似乎是正确的吗?
我在Razor Helper文件中有以下代码
@helper MakeNoteBlank(string content)
{
string msg = "";
if(content == null)
{
msg = " ";
}
else
{
msg = content;
}
<div class="note">
<p>
@Html.Raw(msg)
</p>
</div>
}
Run Code Online (Sandbox Code Playgroud)
该代码在使用@ Html.Raw(..)语句执行时失败,指出“对象引用未设置为对象的实例”。
如果我删除@ Html.Raw(..)并直接输出“ msg”,则没有问题。
我究竟做错了什么?
我有一些“客户详细信息”,我只想显示具有值的字段。
例如,如果Telephone为null,则不显示它。
我目前在模型中
public string FormattedTelephone
{
get { return string.IsNullOrEmpty(this.Telephone) ? " " : this.Telephone; }
}
Run Code Online (Sandbox Code Playgroud)
在我看来
@Html.DisplayFor(model => model.FormattedTelephone)
Run Code Online (Sandbox Code Playgroud)
这工作正常,但是,如果字段具有值,例如,我想显示字段名称
电话: 02890777654
如果我@Html.DisplayNameFor在视图中使用,即使该字段为null,它也会显示该字段名称。
我还想用粗体设置字段名称的样式,不确定在哪里设置样式(视图或视图模型)。