c# - 在 ASP.NET MVC 3 应用程序中使用自定义 html 帮助程序

标签 c# asp.net asp.net-mvc razor

所以,几个小时以来,我一直在尝试做一些我认为——现在仍然认为——应该微不足道的事情。基本上,我创建了一个 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 指令或程序集引用?)

这是我尝试过的:

  1. 已添加 <add namespace="MVCUI.Extensibility" /><system.web.webPages.razor>/<pages>/<namespaces> Views 文件夹根目录下的 Web.config 文件部分。
  2. 已添加 @using MVCUI.Extensibility;_Layout.cshtml 文件的顶部。
  3. 尝试了上述 (1) 和 (2) 的所有组合。
  4. 尝试了语法:@{ Html.MenuLink("Posts", "Posts", "Post", "selected", new { }, new { }); }
  5. 用 Google 搜索了很多!所有 Material 和资源,包括我们自己的 stackoverflow,似乎都表明我在做正确的事。
  6. 甚至尝试在 AssemblyInfo.cs 中设置 [assembly: ComVisible(true)]。好吧,以防万一! ;)

免责声明:这是我第一次在 ASP.NET MVC 3 应用程序中尝试 html 助手。 我哪里会出错?谢谢大家。

最佳答案

就像有人在评论中指出的那样,我的设置有些不同。在我的解决方案中,我更改了我的项目(包括 MVC 项目)的输出路径,而不是默认的 bin\。类似于 ..\Library\Build\ .到目前为止,该设置运行良好,因此那里没有犯罪。

但是,这就是让我陷入困境的原因。在我恢复默认输出路径并重建我的项目后,Html 帮助器工作了。即使在我恢复了我的首选输出路径后它仍然继续工作 - 显然是因为 bin 中的 dll文件夹已更新。

这意味着语句 @using MVCUI.Extensibility;在我的 .cshtml 文件和 <add namespace="MVCUI.Extensibility" /> Web.config 中的 引用了 bin 文件夹中未定义 HtmlHelper 的旧的过时 dll。这仍然困扰。我如何让他们在我想要的输出路径中引用 dll?

无论如何,我只是觉得我应该把经验和教训发上来,以防其他人发现自己遇到类似的麻烦。谢谢大家。

关于c# - 在 ASP.NET MVC 3 应用程序中使用自定义 html 帮助程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13036586/

相关文章:

c# - 换行符未添加到字符串

c# - 网页设计问题

c# - MVVM,对ViewModelLocator和DataTemplate感到困惑,导致ViewFirst vs ViewModel First

c# - 有人有 ServiceStack 或其他 .Net 服务框架的经验吗?

c# - 将复选框绑定(bind)到数据库中的位字段 (AJAX)

c# - ASP.Net MVC3 通过或不通过 Visual Studio 修改日期和小数的文化?

c# - 以编程方式更改 'Region and Language' 操作系统设置

javascript - 在线测试系统asp.net mvc

c# - 在中间件.net core 2.0中获取访问 token

c# - 如何从pdf图像中查找文本?