【问题标题】:NullReferenceException in foreach loop in ASP MVC 2 View [duplicate]ASP MVC 2视图中foreach循环中的NullReferenceException [重复]
【发布时间】:2014-07-09 13:42:33
【问题描述】:

我正在使用 ASP MVC 2 制作简单的 CRUD 应用程序。现在我在将 ViewData[List] 分配到我的视图中的 List 时遇到问题(我猜),它显示 NullReferenceException。我附上了我的查看代码的屏幕截图。如果有人向我展示如何使其正常工作,我会很高兴。

更新:

如果有人需要 Controller 和 View 的代码,这里是:

控制器(文件名:“Controllers”文件夹下的BookController.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using BookStore.Repositories;
using BookStore.Models;
using BookStore.Services;


namespace BookStore.Controllers
{
    public class BookController : Controller
    {
        private IBookService bookService = new BookService();
        //
        // GET: /Book/Bookstore
        [HttpGet]
        public ActionResult Bookstore()
        {
            ViewData["BookStoreMessage"] = "Store of books welcomes you!";

            ViewData["Books"] = bookService.findAllBooks();

            return View("Booklist");
        }
    }
}

视图(文件名:“Views\Book”文件夹下的 Booklist.aspx)

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="BookStore" // was: Namespace="BookStore.Models" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>List of available books</title>
</head>
<body>
    <h2><%=Html.Encode(ViewData["BookStoreMessage"])%></h2>
    <div>
        <table>
            <thead>
                <th>ID</th>
                <th>Title</th>
                <th>Year</th>
                <th>Price</th>
            </thead>
            <tbody>
                <% foreach (Book bookitem in (ViewData["Books"] as List<Book>)) %>
                <% { %>
                   <tr>
                    <td><% Response.Write(Html.Encode(bookitem.id)); %></td>
                    <td><%=Html.Encode(bookitem.name)%></td>
                    <td><%=Html.Encode(bookitem.year)%></td>
                    <td><%=Html.Encode(bookitem.price)%></td>
                   </tr>
                <% } %>
            </tbody>
        </table>
    </div>
</body>
</html>

【问题讨论】:

  • 如果你发布你的控制器和视图的代码会更好
  • 请发布代码。
  • 确保 ViewData 具有赋值使用从 开始的代码块
  • 我猜显示为重复的问题根本不匹配这个问题......
  • 我同意,提供的重复问题(目前有 14 个答案)没有提供可能存在导入误用(我的情况)的信息,这将导致 foreach 循环中出现 NullReferenceException。

标签: c# asp.net-mvc asp.net-mvc-2


【解决方案1】:

根据您的手表,这是因为来自ViewData["Books"] 的数据不是List&lt;Book&gt; 类型。所以,as 返回一个空值。

它的类型是List&lt;BookStore.Book&gt;,而您正试图转换为List&lt;BookStore.Models.Book&gt;

【讨论】:

  • 感谢您指出这一点,在仔细查看调试器手表后,我设法正确组织了导入,现在它正在工作。我应该自己猜到的(这就是为什么我现在觉得很蹩脚:/)。
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 2014-03-03
  • 1970-01-01
相关资源
最近更新 更多