繁体   English   中英

HTML Helper未在ASP.Net MVC3中检测模型

[英]Html Helper is not detecting the model in ASP.Net mvc3

在我当前的项目中,我必须在ASP.Net MVC3 Razor中实现从数据库动态加载树菜单。以下结构显示了我的菜单模型。 MVC3的专业水平:初学者

MenuId名称ParentMenuId OrderBy

1项目1空1 2项目2空2 3项目2.1
2 1 4项目2.1.1 3 1 5项目2.1.2 3 2

为此,我已经做了以下事情:1.Created Htmlhelper包含菜单和子菜单的静态类,2.Created Menu的模型,3.将HtmlHelper命名空间添加到views / web.config

当我们调试代码时,它显示了一个错误,即值不能为null。但是我的数据库包含数据,即count = 11该错误是由于菜单计数为零而导致的。由于菜单表包含11行数据,该如何解决?

错误

值不能为空。 参数名称:来源

说明:执行当前Web请求期间发生未处理的异常。 请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。

异常详细信息:System.ArgumentNullException:值不能为null。 参数名称:来源

源错误:

第14行:{第15行:string htmloutput = string.Empty; 第16行:如果(menu.Count()> 0),则第17行:{第18行:htmloutput + =“”;

源文件:D:\\ VS Projects \\ Elixir \\ Elixir \\ HtmlHelpers \\ HtmlHelperExtensions.cs行:16

堆栈跟踪:

[ArgumentNullException:值不能为null。 参数名称:source] System.Linq.Enumerable.Count(IEnumerable 1 source) +4164811
Elixir.HtmlHelpers.HtmlHelperExtensions.ParentMenus(HtmlHelper html, IEnumerable
1 source) +4164811
Elixir.HtmlHelpers.HtmlHelperExtensions.ParentMenus(HtmlHelper html, IEnumerable
D:\\ VS Projects \\ Elixir \\ Elixir \\ HtmlHelpers \\ HtmlHelperExtensions.cs:16中的1 source) +4164811
Elixir.HtmlHelpers.HtmlHelperExtensions.ParentMenus(HtmlHelper html, IEnumerable
1菜单)

d:\\ VS Projects \\ Elixir \\ Elixir \\ Views \\ Home \\ Menus.cshtml:4中的ASP._Page_Views_Home_Menus_cshtml.Execute()
System.Web.WebPages.WebPageBase.ExecutePageHierarchy()+207
System.Web.Mvc.WebViewPage.ExecutePageHierarchy()+81
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext,TextWriter writer,WebPageRenderingBase startPage)+88
System.Web.Mvc.RazorView.RenderView(ViewContext viewContext,TextWriter编写器,对象实例)+220
System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext,TextWriter writer)+115
System.Web.Mvc.HtmlHelper.RenderPartialInternal(字符串局部视图名,ViewDataDictionary viewData,对象模型,TextWriter作家,ViewEngineCollection viewEngineCollection)+279
System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper,字符串partialViewName,对象模型,ViewDataDictionary viewData)+113 System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper,字符串partialViewName)+31
d:\\ VS Projects \\ Elixir \\ Elixir \\ Views \\ Home \\ Index.cshtml:16中的 ASP._Page_Views_Home_Index_cshtml.b_ 2()
System.Web.WebPages。<> c _DisplayClassb.b__9(TextWriter tw)+283 System.Web.WebPages.HelperResult.WriteTo(TextWriter writer)+12 System.Web.WebPages.WebPageBase.Write(HelperResult结果)+67 ASP。 d:\\ VS Projects \\ Elixir \\ Elixir \\ Views \\ Shared_LayoutUser.cshtml:136中的_Page_Views_Shared__LayoutUser_cshtml.Execute()
System.Web.WebPages.WebPageBase.ExecutePageHierarchy()+207
System.Web.Mvc.WebViewPage.ExecutePageHierarchy()+81
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext,TextWriter writer,WebPageRenderingBase startPage)+88
System.Web.WebPages。<> c_ DisplayClass7.b _6(TextWriter writer)+102 System.Web.WebPages.HelperResult.WriteTo(TextWriter writer)+12 System.Web.WebPages.WebPageBase.Write(HelperResult结果)+67
System.Web.WebPages.WebPageBase.RenderSurrounding(字符串partialViewName,动作1 body) +66
System.Web.WebPages.WebPageBase.PopContext() +262
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +95
System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +220
System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +115
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +303 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +23 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func
1 body) +66
System.Web.WebPages.WebPageBase.PopContext() +262
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +95
System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +220
System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +115
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +303 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +23 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func
1 body) +66
System.Web.WebPages.WebPageBase.PopContext() +262
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +95
System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +220
System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +115
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +303 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +23 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func
1延续)+260

System.Web.Mvc。<> c_ DisplayClass1e.b _1b()+19 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext,IList 1 filters, ActionResult actionResult) +177
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343
System.Web.Mvc.Controller.ExecuteCore() +116
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8
1 filters, ActionResult actionResult) +177
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343
System.Web.Mvc.Controller.ExecuteCore() +116
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8
1 filters, ActionResult actionResult) +177
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343
System.Web.Mvc.Controller.ExecuteCore() +116
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8
1.b__7(IAsyncResult )+12 System.Web.Mvc.Async.WrappedAsyncResult`1.End()+ 62 System.Web.Mvc。<> c _DisplayClasse.b_ d( )+50

System.Web.Mvc.SecurityUtil.b _0(动作f)+7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(动作)+22 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult结果)+9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+8862381 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值且已完成)+184

HTML帮助代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using Elixir.Models;

namespace Elixir.HtmlHelpers
{
    public static class HtmlHelperExtensions
    {
        public static string ParentMenus(this HtmlHelper html,IEnumerable<Menus> menu)
        {
            string htmloutput=string.Empty;
            if (menu.Count() > 0)
            {
                htmloutput += "<ul class='side-navigation accordion' id='nav-accordion'>";
                var MainMenu = from mainMenu in menu where mainMenu.MainMenuId == null orderby mainMenu.MenuOrder select mainMenu;
                foreach(Menus m in MainMenu)
                {
                    htmloutput += "<li>";
                    htmloutput += "<li><i class='icon-home'>";
                    htmloutput += LinkExtensions.ActionLink(html, m.LinkName, m.ActionName, m.ControllerName);
                    htmloutput += "</li>";
                    htmloutput += "</li></i>";
                }
                htmloutput += "</ul>";
            }
            return htmloutput;

        }

        public static string SubMenu(this HtmlHelper html, IEnumerable<Menus> SubMenu, int MenuId)
        {
            string htmlOutput = string.Empty;
            if (SubMenu.Count() > 0)
            {
                htmlOutput += "<ul class='side-navigation accordion' id='nav-accordion'>";
                var subMenu = from SMenu in SubMenu where SMenu.MainMenuId == MenuId orderby SMenu.MenuOrder select SMenu;
                foreach (Menus m in subMenu)
                {
                    htmlOutput += "<li>";
                    htmlOutput += "<li><i class='icon-home'>";
                    htmlOutput += LinkExtensions.ActionLink(html, m.LinkName, m.ActionName, m.ControllerName);
                    htmlOutput += "</li>";
                    htmlOutput += "</li></i>";
                }
                htmlOutput += "</ul>";
            }
            return htmlOutput;
        }

    }
}

控制器代码

public ActionResult Menus()
        {
            var MMenu = ment.Menu.ToList();
            return PartialView(MMenu);
        }

Menu.cshtml(部分布局)

@model IEnumerable<Elixir.Models.Menus>

<div>
    @Html.Raw(@Html.ParentMenus(Model))



    </div>

索引页

@{
    ViewBag.Title = "Elixir ERP V1.0 Beta";
    Layout = "~/Views/Shared/_LayoutUser.cshtml";
}
<div class="main-container">
    <div class="main-wrapper">
        <div class="scroll-top">
            <a href="#" class="tip-top" title="Go Top"><i class="icon-arrow-up"></i></a>
        </div>
        <div class="left-bar merge-left">
            <!-- SEARCH BAR -->
            <!-- LEFT NAV -->
          @section leftnav{

             <div class="left-nav">
             @Html.Partial("Menus");
             </div>


          }
        </div>
    </div>
    <div class="container">
    </div>
</div>

菜单型号

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Elixir.Models
{
    [Table("tbl_Menus")]
    public class Menus
    {
        [Key]
        public int MenuId { get; set; }
        public string UserName { get; set; }
        public string MenuName { get; set; }
        public int MenuOrder { get; set; }
        public int? MainMenuId { get; set; }
        public string LinkName { get; set; }
        public string ActionName { get; set; }
        public string ControllerName { get; set; }

    }
}

错误

您的Menu.cshtml应该是Menus.cshtml吗?

如果是这样,您可以在此行中将其作为部分调用:

@Html.Partial("Menus");

但是您没有给它一个模型。

尝试使用

@Html.Action("Menus")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM