我是Mvc4的新手。基本上我想创建具有菜单和子菜单的动态标签。
这是My 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)
}
}
在局部视图中,我想调用htmlhelper mthod&#34; ParentMenus&#34;使用@ Html.Raw.I我不知道该怎么做。
答案 0 :(得分:3)
两件事:
我建议您更改HTML帮助程序以返回包含HTML的HtmlString
。然后你可以避免使用@Html.Raw()
,这几乎总是一种不好的做法(虽然它有其目的)。
在Razor视图页面(CSHTML文件)中,将@using DBMvc.Htmlhlpr
放在文件的顶部以确保已导入帮助程序命名空间。然后使用@Html.ParentMenus(...)
来调用助手。
项目#1并非绝对必要,但它是所有内置HTML帮助程序所做的事情,通常是一种很好的做法。
如果不是,请说明您获得的错误(如果有)。
答案 1 :(得分:2)
在视图中包含您需要调用的命名空间:
@using DBMvc.Htmlhlpr
然后使用它:
@Html.ParentMenus() // pass the parameters which are needed in this IEnumarable<T>
一般情况下,我们不希望在我们要使用帮助程序的每个视图中包含命名空间,因此我们可以在<namespaces>
下的视图 web.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()
这是article解释How to create custom HTML Helpers for ASP.NET MVC and Razor View Engine,这里是官方的asp.net mvc文章Creating Custom Html Helpers C#