MvcSiteMap — NullreferenceException при переборе Model.Nodes. (Бритва ASP.NET MVC3)

У меня проблема с MvcSiteMap. Я получаю NullreferenceException при взаимодействии с Model.Nodes, потому что модель имеет значение 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>

Тестсайтемап.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();
            }

Я не могу понять, что я делаю неправильно!

Надеюсь, кто-нибудь может помочь! Спасибо!


comment
Вы можете опубликовать свой Action код?   -  person Mohammed Swillam    schedule 05.04.2011


Ответы (1)


@Html.MvcSiteMap().Menu() создаст модель, а затем будет использовать шаблон представления для отображения данных. С вашей точки зрения, Модель — это ваша Модель, а не Модель SiteMap.

person langtu    schedule 06.04.2011