2012-04-19 6 views
1

何かの理由で、私のASP.NET MVC3のWebページが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つの異なるコントローラから私が使用する最終的な方法:

これはその一つですビューモデルオブジェクトにデータを配置します。

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(); 
      } 
     } 

そして、これはデータの一部を取得する1ではありません:関係なく、私は私の見解でforeachの上の現在のエラーが出るん何

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はによって未処理でしたユーザーコード
メッセージ=オブジェクト参照がオブジェクトのインスタンスに設定されていません。
ソース= App_Web_nvi5brwnのStackTrace:CでASP.views_home_index_aspx .__ RenderContent3(たHtmlTextWriter __w、コントロールparameterContainer)で :\ユーザーはAronChan \デスクトップ\ Dropboxが\ SkyLearn \ Skylearnウェブサイト(アロン sikkerhedskopi)\ SkyLearn \ビュー\ホーム\インデックスを\します.aspx:line 8 at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriterライター、ICollection children) at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) at System.Web.UI.Control.Render指定されたHtmlTextWriterライター)System.Web.UI.Control.RenderControlInternalで (System.Web.UI.ControlでSystem.Web.UI.Control.RenderControlで指定されたHtmlTextWriterライター、たControlAdapterアダプタ) (たHtmlTextWriterライター、たControlAdapterアダプタ) 。 RenderControl ASP.views_shared_site_master._ で が _control1をレンダリング(たHtmlTextWriterライター)(たHtmlTextWriter __w、 コントロールparameterContainer) はC:\ユーザーはAronChan \デスクトップ\ Dropboxが\ SkyLearn \ Skylearnウェブサイト(アロン sikkerhedskopi)\ \ SkyLearnビュー\ \ Shared \ Site.Master:System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriterライター、ICollection children)の 行System.Web.UI.Control.RenderChildren(HtmlTextWriterライター)の System.Web.UIの System.Web.UI.Control.RenderControl(HtmlTextWriterライター、ControlAdapterアダプター)で System.Web.UI.Control.RenderControlInternal(HtmlTextWriterライター、ControlAdapterアダプター)で Control.Render(HtmlTextWriterライター) System.Web.UI.Control.RenderChildren(たHtmlTextWriterライターでSystem.Web.UI.Control.RenderChildrenInternal(指定されたHtmlTextWriterライター、ICollectionを子供) でSystem.Web.UI.Control.RenderControlでTERアダプタ) (たHtmlTextWriterライター) )System.Web.UI.Control.RenderControlでSystem.Web.UI.Control.RenderControlInternal(指定されたHtmlTextWriterライター、たControlAdapterアダプタ) でSystem.Web.Mvc.ViewPage.Render(たHtmlTextWriterライター) (たHtmlTextWriterライター、たControlAdapterで アダプタ) System.Web.UI.Control.RenderControl(HtmlTextWriterライタ) at System.Web.UI.Page。ProcessRequestMain(ブールincludeStagesBeforeAsyncPoint、ブールのincludeStagesAfterAsyncPoint)
のInnerException:

私は私が考えることができるすべてを試してみました。助けてくださいxD

答えて

2

あなたの問題はおそらくあなたのインデックスのあなたの問題です。この場合、モデルを渡すことはありません。したがって、Modelはこの場合nullになります。テストして確認するために空の新しいモデルを送信しようとします。

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

      return View(); 
     } 
+0

あなたは本当に正しい紳士です!ありがとうございました :) – AronChan

関連する問題