html - 如何在 MVC3 中使用 HTML 助手构建 html

标签 html asp.net-mvc asp.net-mvc-3 html-helper

我有一个这样的助手,我在内部使用原始 HTML 创建了它,如下所示:

private static readonly Core Db = new Core();
        // Main menu
public static MvcHtmlString MainMenu()
{
    IQueryable<Page> primaryPages = Db.Pages.Where(p => p.IsItShowInMenu);
    var sb = new StringBuilder();
    sb.Clear();
     string pagecode = Convert.ToString(HttpContext.Current.Request.RequestContext.RouteData.Values["url"]);
    sb.Append("<div id=\"Logo\">");
    sb.Append("<a href=\"/\"><span id=\"Logo_Text\">Dr. Shreekumar</span></a> <span id=\"Logo_Sub_Text\">Obstetrician & Gynecologist</span>");
    sb.Append("</div>");
    sb.Append("<div id=\"Primary_Menu\">");
    sb.Append("<ul>");
    foreach (Page page in primaryPages)
    {
        if (page.PageCode != "Home")
        {
             Page currentPage = Db.Pages.SingleOrDefault(p => p.PageCode == pagecode);
             if (currentPage != null)
             {
                  Page parentPage = Db.Pages.Find(currentPage.ParentId);
                  if (parentPage != null)
                  {
                      sb.AppendFormat((page.PageCode == parentPage.PageCode ||
                      page.PageCode == currentPage.PageCode)
                      ? "<li class=\"active\"><a href=\"/pages/{0}\">{1}</a></li>"
                        : "<li><a href=\"/pages/{0}\">{1}</a></li>", page.PageCode,
                              page.Name.Trim());

                  }
                  else
                  {
                     sb.AppendFormat("<li><a href=\"/pages/{0}\">{1}</a></li>", page.PageCode,page.Name);
                  }
              }
              else
              {
                  sb.AppendFormat("<li><a href=\"/pages/{0}\">{1}</a></li>", page.PageCode, page.Name);
              }
        }
    }
    sb.Append("</ul>");
    sb.Append("</div>");
    return new MvcHtmlString(sb.ToString());
 }

谁能建议我如何使用 MVC HTML 帮助程序( anchor 、列表 (li)、div 等的帮助程序)转换它

最佳答案

作为应用程序的架构师,定义帮助程序生成的内容和不生成的内容是您角色的重要组成部分,因为这取决于代码中重复的内容以及重复的频率。我不会告诉你构建助手的目的是什么,因为这取决于你整个应用程序的架构。然而,为了帮助您做出决定,请考虑您可以构建的两种一般类型的助手:全局和本地。

全局帮助程序适用于经常在您的站点中重复的代码块,可能有一些小的更改,可以通过传递不同的参数来处理。本地助手做同样的工作,但对给定页面来说是本地的。具有在其他任何地方都找不到的重复代码段的页面应该实现本地帮助程序。那么现在……

全局助手:创建一个新的静态类来包含您的助手。然后,在容器类中创建如下所示的静态方法:

public static MvcHtmlString MyHelper(this HtmlHelper helper, (the rest of your arguments here))
{
    // Create your HTML string.
    return MvcHtmlString.Create(your string);
}

这样做是在 Html 助手类上创建一个扩展方法,它允许您使用标准 Html. 访问您的助手。句法。请注意,您必须在要使用自定义助手的任何文件中包含此类的命名空间。

本地助手:当您希望助手位于单个 View 的本地时,另一种实现助手的方法会起作用。也许您在 View 中有一段代码被一遍又一遍地重复。您可以使用以下语法;

@helper MyHelper()
{
    // Create a string
    @MvcHtmlString.Create(your string here);
}

然后您可以使用以下方法将其输出到您的页面:

@MyHelper()

我们一直在创造MvcHtmlString的原因objects 是因为作为内置于 MVC 中的安全功能,输出的字符串被编码以显示它们在页面上的文本中的外观。这意味着 <将被编码,以便您在页面上实际看到一个“<”。默认情况下,它不会启动 HTML 标记。

为了解决这个问题,我们使用 MvcHtmlString类,它绕过此安全功能并允许我们将 HTML 直接输出到页面。

关于html - 如何在 MVC3 中使用 HTML 助手构建 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13785665/

相关文章:

html - Gif 图像有时不显示但替代文本显示?

Jquery - 永无止境的 slider ,速度问题

c# - Entity Framework 6 Code First 查找表未填充

c# - 付款被批准后如何从paypal取回信息?

asp.net - 部署在 IIS 6 上的 MVC3 RC 应用程序出现 "403 forbidden"错误

xml - Razor 而不是 XSLT 来转换 MVC3/MVC4 应用程序中的 XML 文档?

html - 如何使我的导航栏在两个不均匀的元素之间居中?

html - 使用 CSS 连续翻转 3 个图像

javascript - 使用带有 SqlDependency 的 SignalR 推送数据库更新

asp.net-mvc-3 - ASP.NET MVC3 Razor : Is it possible to have C# code blocks without @if or @foreach?