所以,几个小时以来,我一直在尝试做一些我认为——而且仍然认为——应该是微不足道的事情。基本上,我创建了一个 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”的定义,并且找不到接受“System.Web.Mvc.HtmlHelper”类型的第一个参数的扩展方法“MenuLink”(您是否缺少 using 指令或程序集引用?)
这是我尝试过的:
- 添加
<add namespace="MVCUI.Extensibility" />
到Views文件夹根目录下的Web.config<system.web.webPages.razor>/<pages>/<namespaces>
文件部分。 - 在_Layout.cshtml文件
@using MVCUI.Extensibility;
的顶部添加。 - 尝试了上述 (1) 和 (2) 的所有组合。
- 尝试了语法:
@{ Html.MenuLink("Posts", "Posts", "Post", "selected", new { }, new { }); }
- 谷歌搜索,很多!所有材料和资源,包括我们自己的 stackoverflow,似乎都表明我在做正确的事情。
- 甚至尝试在AssemblyInfo.cs中设置[assembly: ComVisible(true)]。好吧,以防万一!;)
免责声明:这是我第一次在 ASP.NET MVC 3 应用程序中尝试使用 html 助手。我哪里会出错?谢谢人们。