2012-04-19 3 views
1

По какой-то причине моя веб-страница ASP.NET MVC3 продолжает бросать мне NullReferenceExceptions. Странные вещи заключаются в том, что я не могу определить источник проблемы. Независимо от того, что я пишу, на мой взгляд, первая часть кода (в данном случае мой foreach), как говорят, вызывает эту ошибку.NullReferenceException независимо от того, что я делаю на мой взгляд

мой взгляд выглядит следующим образом:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SkyLearn.Models.StartpageDataViewModel>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Skylearn - Startside 
</asp:Content> 

<asp:Content ID="Content3" ContentPlaceHolderID="SideContent" runat="server"> 
     <%foreach (var category in Model.CurrentUsersCategories) 
      {%> 
      <div class="homecategory"><div class="homecategoryicon"></div><%: Html.DisplayFor(Title => category.Title)%></div> 
     <%}%>  
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <%: ViewBag.Message %> 
</asp:Content> 

И это ViewModel:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Globalization; 
using System.Web.Mvc; 
using System.Web.Security; 
using SkyLearn.Areas.Categories.Models; 
using SkyLearn.Areas.Categories.Controllers; 

namespace SkyLearn.Models 
{ 
    public class StartpageDataViewModel 
    { 
     public List<Category> CurrentUsersCategories { get; set; } 

     public StartpageDataViewModel() 
     { 
      CurrentUsersCategories = new List<Category>(); 
     } 
    } 
} 

и, наконец, методы я использую от 2 разных контроллеров:

это тот, помещает данные в объект viewmodel:

public ActionResult Index() 
     { 
      if (Request.IsAuthenticated) 
      { 
       StartpageDataViewModel model = new StartpageDataViewModel(); 

       MembershipUser currentuser = Membership.GetUser(); 
       List<Category> categories = new List<Category>(); 

       categories = accountcontroller.getCategoriesByRoles((Guid)currentuser.ProviderUserKey); 

       foreach (Category category in categories) 
       { 
        model.CurrentUsersCategories.Add(category); 
       } 

       ViewBag.Message = "Velkommen til Skylearn Video Tutorials " + currentuser.UserName + "!"; 

       return View(model); 
      } 
      else 
      { 
       ViewBag.Message = "Log venligst ind for at benytte Skylearn Video Tutorials"; 

       return View(); 
      } 
     } 

И это тот, который получает некоторые данные:

public List<Category> getCategoriesByRoles(Guid userid) 
     { 
      List<Category> categoriesbyrole = new List<Category>(); 

      MembershipUser user = Membership.GetUser(userid); 

      string[] roles = Roles.GetRolesForUser(user.UserName); 

      List<Category> categories = categorycontroller.getCategories(); 

      foreach (string role in roles) 
      { 
       foreach (Category category in categories) 
       { 
        if (role == category.Title) 
        { 
         categoriesbyrole.Add(category); 
        } 
       } 
      } 

      return categoriesbyrole; 
     } 

независимо от того, что я делаю, я получаю текущую ошибку на Еогеасп на мой взгляд:

System.NullReferenceException был необработанное по код пользователя
Message = Ссылка на объект не установлена ​​в экземпляр объекта.
Источник = App_Web_nvi5brwn StackTrace: в ASP.views_home_index_aspx .__ RenderContent3 (HtmlTextWriter __w, управление parameterContainer) в C: \ Users \ AronChan \ Desktop \ Dropbox \ SkyLearn \ Skylearn Сайт (Aron sikkerhedskopi) \ SkyLearn \ Views \ Home \ Индекс .aspx: строка 8 в System.Web.UI.Control.RenderChildrenInternal (HtmlTextWriter writer, ICollection children) в System.Web.UI.Control.RenderChildren (HtmlTextWriter writer) в System.Web.UI.Control.Render (HtmlTextWriter) в System.Web.UI.Control.RenderControlInternal (HtmlTextWriter writer, адаптер адаптера адаптера) в System.Web.UI.Control.RenderControl (HtmlTextWriter writer, адаптер адаптера адаптера) в System.Web.UI.Control. RenderControl (HtmlTextWriter писатель) в ASP.views_shared_site_master._ Рендер _control1 (HtmlTextWriter __w, управления parameterContainer) в C: \ Users \ AronChan \ Desktop \ Dropbox \ SkyLearn \ Skylearn Сайт (Aron sikkerhedskopi) \ SkyLearn \ Просмотры \ Shared \ Site.Master: строка 34 в System.Web.UI.Control.RenderChildrenInternal (HtmlTextWriter writer, ICollection children) в System.Web.UI.Control.RenderChildren (HtmlTextWriter writer) в System.Web.UI. Control.Render (HtmlTextWriter writer) в System.Web.UI.Control.RenderControlInternal (HtmlTextWriter writer, адаптер адаптера адаптера) в System.Web.UI.Control.RenderControl (HtmlTextWriter writer, ControlAdap тер адаптер) на System.Web.UI.Control.RenderControl (HtmlTextWriter писатель) в System.Web.UI.Control.RenderChildrenInternal (HtmlTextWriter писатель, ICollection детей) в System.Web.UI.Control.RenderChildren (HtmlTextWriter писатель) в System.Web.Mvc.ViewPage.Render (HtmlTextWriter writer) в System.Web.UI.Control.RenderControlInternal (HtmlTextWriter writer, адаптер адаптера адаптера) в System.Web.UI.Control.RenderControl (HtmlTextWriter writer, ControlAdapter адаптер) в System.Web.UI.Control.RenderControl (HtmlTextWriter writer) на System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:

Я попробовал все, что я мог думать. Помогите мне xD

ответ

2

Ваша проблема, вероятно, исходит от вашего другого в Индексе. В этом случае вы не проходите модель. Таким образом, Model будет null в этом случае. Я попытался бы отправить новую модель, пустую для проверки и проверки.

else 
     { 
      ViewBag.Message = "Log venligst ind for at benytte Skylearn Video Tutorials"; 

      return View(); 
     } 
+0

Вы абсолютно правы и настоящий господин сэр! Спасибо :) – AronChan

Смежные вопросы