1

何らかの理由で、ASP.NETMVC3WebページからNullReferenceExceptionsがスローされ続けます。奇妙なことに、問題の原因を特定することは不可能です。私の見解に何を書いても、最初のコード(この場合は私のforeach)がこのエラーを引き起こすと言われています。

私の見解は次のようになります。

<%@ 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>

そしてこれはビューモデルです:

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

私が何をしても、私のビューのforeachで現在のエラーが発生します:

System.NullReferenceExceptionは
、オブジェクトのインスタンスに設定されていないユーザーコードMessage=Object参照によって処理されませんでした。
Source = App_Web_nvi5brwn StackTrace:at ASP.views_home_index_aspx .__ RenderContent3(HtmlTextWriter __w、Control parameterContainer)in c:\ Users \ AronChan \ Desktop \ Dropbox \ SkyLearn \ Skylearn Website(Aron sikkerhedskopi)\ SkyLearn \ Views 8 at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer、ICollection children)at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)at System.Web.UI.Control.Render(HtmlTextWriter writer)at System.Web .UI.Control.RenderControlInternal(HtmlTextWriterライター、ControlAdapterアダプター)at System.Web.UI.Control.RenderControl(HtmlTextWriterライター、ControlAdapterアダプター)at System.Web.UI.Control.RenderControl(HtmlTextWriterライター)at ASP.views_shared_site_master._与える_control1(HtmlTextWriter __w、Control parameterContainer)in c:\ Users \ AronChan \ Desktop \ Dropbox \ SkyLearn \ Skylearn Website(Aron sikkerhedskopi)\ SkyLearn \ Views \ Shared \ Site.Master:line 34atSystem.Web.UI.Control。 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)at System.Web.UI.Control.Render(HtmlTextWriter writer)at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer、 System.Web.UI.Control.RenderControl(HtmlTextWriter writer、ControlAdapter adapter)at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer、ICollection children )System.Web.UI.Controlで。System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer)at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer、ControlAdapter adapter)at System.Web.UI.Control.RenderControl(HtmlTextWriter writer、 ControlAdapterアダプター)at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint、Boolean includeStagesAfterAsyncPoint)System.Web.UI.Page.ProcessRequestMain(ブール値includeStagesBeforeAsyncPoint、ブール値includeStagesAfterAsyncPoint)のRenderControl(HtmlTextWriterライター)System.Web.UI.Page.ProcessRequestMain(ブール値includeStagesBeforeAsyncPoint、ブール値includeStagesAfterAsyncPoint)のRenderControl(HtmlTextWriterライター)
InnerException:

私は考えられるすべてを試しました。xDを手伝ってください

4

1 に答える 1

2

あなたの問題は、おそらくインデックスのあなたの他のものから来ています。この場合、モデルを渡しません。したがって、Modelこの場合は null になります。テストと検証のために空の新しいモデルを送ってみます。

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

            return View();
        }
于 2012-04-19T21:18:09.713 に答える