所以,几个小时以来,我一直在努力做一些我认为 - 而且仍然认为 - 应该是微不足道的事情。基本上,我创建了一个Html帮助器,我需要使用它来将一些CSS属性应用于ASP.NET MVC 3应用程序的选定菜单。这是我的Html助手:
namespace MVCUI.Extensibility
{
public static class HtmlHelpers
{
public static MvcHtmlString MenuLink(
this HtmlHelper helper,
string text,
string action,
string controller,
string selectedCssClass,
object routeValues,
object htmlAttributes)
{
var attributes = new RouteValueDictionary(htmlAttributes);
if (!String.IsNullOrWhiteSpace(selectedCssClass))
{
var contextController = helper.ViewContext.RouteData.Values["controller"] as String ?? "Home";
var contextAction = helper.ViewContext.RouteData.Values["action"] as String ?? "Index";
if (String.Compare(
String.Format("{0}/{1}", controller, action),
String.Format("{0}/{1}", contextController, contextAction), true) == 0)
{
var cssValue = String.Empty;
if (attributes.ContainsKey("class"))
cssValue = attributes["class"] as String ?? String.Empty;
cssValue = cssValue.Trim();
if (cssValue.Length > 0)
cssValue = cssValue += (" " + selectedCssClass);
else
cssValue = selectedCssClass;
attributes["class"] = cssValue;
}
}
return helper.ActionLink(text, action, controller, new RouteValueDictionary(routeValues), attributes);
}
}
}
以下是我在 _Layout.cshtml 文件中使用它的方法:
@Html.MenuLink("Posts", "Posts", "Post", "selected", new { }, new { })
由于一些非常奇怪的原因,我不断收到错误:
说明: 在编译为此请求提供服务所需的资源期间发生错误。请查看以下特定错误详细信息并相应地修改源代码。
编译器错误消息: CS1061:'System.Web.Mvc.HtmlHelper'不包含'MenuLink'的定义,也没有扩展方法'MenuLink'接受类型的第一个参数可以找到'System.Web.Mvc.HtmlHelper'(您是否缺少using指令或程序集引用?)
以下是我的尝试:
<add namespace="MVCUI.Extensibility" />
部分添加了<system.web.webPages.razor>/<pages>/<namespaces>
。@using MVCUI.Extensibility;
。@{ Html.MenuLink("Posts", "Posts", "Post", "selected", new { }, new { }); }
免责声明:这是我第一次在ASP.NET MVC 3应用程序中尝试html帮助程序。 我哪里可能出错?谢谢大家。
答案 0 :(得分:1)
就像评论中指出的人一样,我的设置有些不同。在我的解决方案中,我已将项目的输出路径(包括MVC项目)从默认的bin\
更改为..\Library\Build\
。因为那个设置到目前为止工作正常,所以没有犯罪。
但是,这就是让我陷入困境的原因。在我恢复默认输出路径并重建我的项目后,Html帮助程序工作。即使我恢复了我的首选输出路径,它仍然继续工作 - 显然是因为bin
文件夹中的dll已更新。
这意味着 .cshtml 文件中的@using MVCUI.Extensibility;
语句和 Web.config 中的<add namespace="MVCUI.Extensibility" />
引用了bin文件夹中没有定义HtmlHelper的旧的过时dll 。这仍然困扰着。我如何让他们在我想要的输出路径中引用dll?
无论如何,我只是觉得我应该发布有关经验和课程的信息,以防其他人发现自己遇到类似麻烦。谢谢大家。
答案 1 :(得分:0)
如果带有扩展名方法的文件显示using System.Web.WebPages
(它有自己独立的HtmlHelper
类)而不是using System.Web.Mvc
,则会发生这种情况。