如何使用MVC4在部分视图中调用HtmlHelper方法

本文关键字:调用 HtmlHelper 方法 视图 何使用 MVC4 | 更新日期: 2023-09-27 18:19:42

我是Mvc4的新手。基本上我喜欢创建具有菜单和子菜单的动态选项卡。

这是我的Htmlhelper类:

namespace DBMvc.Htmlhlpr
{
public static class HtmlHelperExtension
{
    public static String ParentMenus(this HtmlHelper html, IEnumerable<menu> Menu)
    {
        string htmlOutput = string.Empty;
        if (Menu.Count() > 0)
        {
            htmlOutput += "<ul class='sf-menu'>";
            var Mainmenu = from mainMenu in Menu where mainMenu.Catid == null select mainMenu;
            foreach (menu m in Mainmenu)
            {
                htmlOutput += "<li>";
                htmlOutput += LinkExtensions.ActionLink(html, m.Depname, null);
                htmlOutput += SubMenus(html, Menu, m.Depid);
                htmlOutput += "</li>";
            }
            htmlOutput += "</ul>";
        }
        return htmlOutput;
    }
    private static string SubMenus(this HtmlHelper html, IEnumerable<menu> SubMenu, int Catid)
    {
        string htmlOutput = string.Empty;
        var subMenu = from sm in SubMenu where sm.Depid ==Catid orderby sm.cats select sm;
        if (subMenu.Count() > 0)
        {
            htmlOutput += "<ul>";
            foreach (menu m in subMenu)
            {
                htmlOutput += "<li>";
                htmlOutput += LinkExtensions.ActionLink(html, m.Depname, null);
                htmlOutput += SubMenus(html, SubMenu, m.Catid);
                htmlOutput += "</li>";
            }
            htmlOutput += "</ul>";
        }
        return htmlOutput;}}}}

我的控制器是:

public class FrontController : Controller
{
   // MenuEntities MEnt = new MenuEntities();
    NewDatabaseEntities Db = new NewDatabaseEntities();
   // menu MEnt  = new menu();
   // [ChildActionOnly]
    public ActionResult Menu()
    {
        var mMenu = Db.Dep_Table.ToList();
        return PartialView(mMenu)
    }
}

在部分视图中,我想使用@Html.Raw调用htmlhelper mthod"ParentMenus"。我不知道怎么做。

如何使用MVC4在部分视图中调用HtmlHelper方法

两件事:

  1. 我建议您更改HTML帮助程序以返回包含HTML的HtmlString。然后可以避免使用@Html.Raw(),这几乎总是一种糟糕的做法(尽管它有其目的)。

  2. 在Razor视图页面(CSHTML文件)中,将@using DBMvc.Htmlhlpr放在文件的顶部,以确保已导入助手名称空间。然后使用@Html.ParentMenus(...)调用助手。

项目#1并不是绝对必要的,但它是所有内置HTML助手所做的,通常是一种很好的做法。

如果不是这样的话,请指出你犯了什么错误(如果有的话)。

方式1:

在视图中包含需要调用的名称空间:

@using DBMvc.Htmlhlpr

然后使用它:

@Html.ParentMenus() // pass the parameters which are needed in this IEnumarable<T>

方式2:

通常,我们不希望在每个要使用helper的视图中都包含名称空间,因此我们可以在<namespaces>下的Viewsweb.config中添加名称空间,然后我们不需要在每个视图中都包括名称空间:

<system.web.webPages.razor> 
   <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
   <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
     <namespaces> 
       <add namespace="System.Web.Mvc" /> 
       <add namespace="System.Web.Mvc.Ajax" /> 
       <add namespace="System.Web.Mvc.Html" /> 
       <add namespace="System.Web.Routing" /> 
       <add namespace="DBMvc.Htmlhlpr" /> 
     </namespaces> 
   </pages> 
</system.web.webPages.razor> 

并且在视图中:

@Html.ParentMenus() 

这是一篇文章解释如何为ASP.NET MVC和Razor View Engine创建自定义HTML帮助程序,这是ASP.NET MVC的官方文章《创建自定义HTML帮助程序C#