MvcSiteMap - 迭代 Model.Nodes 时出现 NullreferenceException。 (ASP.NET MVC3 剃刀)
我在使用 MvcSiteMap 时遇到一些问题。在 Model.Nodes 上进行交互时,我收到 NullreferenceException,因为 Model 为 NULL。
我让它与 @Html.MvcSiteMap().Menu() 一起工作,但是当我尝试 DisplayTemplate 中的示例时,我得到了 NullreferenceException。
我已经复制、粘贴了模板中的代码,所以我不明白为什么它不起作用。也许我忘记了什么?
这是我的代码:
Mvc.sitemap
<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0" enableLocalization="false" >
<mvcSiteMapNode title="TestProject" action="Index" controller="Home" changeFrequency="Always" updatePriority="Normal">
<mvcSiteMapNode title="Test" action="Index" controller="Home">
<mvcSiteMapNode title="Test1_5" action="Test1_5" controller="Home">
<mvcSiteMapNode title="Test1_4" action="Test1_4" />
<mvcSiteMapNode title="Test1_1" action="Test1_1" />
<mvcSiteMapNode title="Test1_6" action="Test1_6" />
<mvcSiteMapNode title="Test1_2" action="Test1_2"/>
<mvcSiteMapNode title="Test1_3" action="Test1_3"/>
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMap>
TestSiteMap.cshtml
@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
@using System.Web.Mvc.Html
@using MvcSiteMapProvider.Web.Html.Models
@{
ViewBag.Title = "TestSiteMap";
}
<h2>TestSiteMap</h2>
<ul>
@foreach (var node in Model.Nodes)
{
<li>@Html.DisplayFor(m => node)
@if (node.Children.Any())
{
@Html.DisplayFor(m => node.Children)
}
</li>
}
</ul>
HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcApplication3.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult TestSiteMap()
{
return View();
}
我不知道我做错了什么!
希望任何人都可以提供帮助!谢谢!
I have some problem with MvcSiteMap. I get NullreferenceException when interating over Model.Nodes because Model is NULL.
I got it working with @Html.MvcSiteMap().Menu() but when I try the samples from your DisplayTemplate I get that NullreferenceException.
I have copy, pasted the code from the template, so I cant see why it is not working. Maybe I have forgot something ?
Heres my code:
Mvc.sitemap
<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0" enableLocalization="false" >
<mvcSiteMapNode title="TestProject" action="Index" controller="Home" changeFrequency="Always" updatePriority="Normal">
<mvcSiteMapNode title="Test" action="Index" controller="Home">
<mvcSiteMapNode title="Test1_5" action="Test1_5" controller="Home">
<mvcSiteMapNode title="Test1_4" action="Test1_4" />
<mvcSiteMapNode title="Test1_1" action="Test1_1" />
<mvcSiteMapNode title="Test1_6" action="Test1_6" />
<mvcSiteMapNode title="Test1_2" action="Test1_2"/>
<mvcSiteMapNode title="Test1_3" action="Test1_3"/>
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMap>
TestSiteMap.cshtml
@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
@using System.Web.Mvc.Html
@using MvcSiteMapProvider.Web.Html.Models
@{
ViewBag.Title = "TestSiteMap";
}
<h2>TestSiteMap</h2>
<ul>
@foreach (var node in Model.Nodes)
{
<li>@Html.DisplayFor(m => node)
@if (node.Children.Any())
{
@Html.DisplayFor(m => node.Children)
}
</li>
}
</ul>
HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcApplication3.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult TestSiteMap()
{
return View();
}
I cant figure out what I am doing wrong!
Hope anyone can help! Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
@Html.MvcSiteMap().Menu() 将创建一个模型,然后使用视图模板来显示数据。在您看来,模型是您的模型,而不是 SiteMap 的模型。
@Html.MvcSiteMap().Menu() will create a model and then use view template to display data. In your view, the Model is Model of you, it isn't Model of SiteMap.