对象引用未设置为部分视图上的对象实例

时间:2013-02-01 12:18:24

标签: c# asp.net asp.net-mvc asp.net-mvc-4 partial-views

  

可能重复:
  Object reference not set to an instance of an object - Partial View

在下面的代码中,您可以看到我的Controller Action代码,View Page和模型类。每当我运行应用程序时,我都会收到错误消息:对象引用未设置为对象的实例。此消息显示在View lint上,以foreach(var item in (IEnumerable....)开头。我该如何解决这个问题?

控制器:

public ActionResult Upload()
    {          

        var FilesInfoData = new List<FileInfoModel>(){

             new FileInfoModel(){Name = "sa",Length = 5, LastWriteTime = DateTime.Now},
             new FileInfoModel(){Name = "saa",Length = 5, LastWriteTime = DateTime.Now}

            };

        ViewData["FilesInfoView"] = FilesInfoData;


        return View();
    }

查看:

  <%@ Control Language="C#"             Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<FileInfoModel>>" %>
  <%@ Import Namespace="MembershipTest.Models"%>
  <fieldset>
  <legend>
   Upload File:
  </legend>
  <% using (Html.BeginForm("Upload", "Home", FormMethod.Post, new {  @enctype="multipart/form-data"}))
  { %>
   <span>Filename:</span>
  <input type="file" name="file" id="file" />
  <input type="submit" value="Upload" />
  <% } %>

  </fieldset>
  <div id="uploadTable">
  <table border="0" cellpadding="0" cellspacing="0">
  <thead>
  <tr>
  <th>
  Filename
  </th>
  <th>
  Length
  </th>
  <th>
  LastModified
  </th>
  </tr>
  </thead>
  <tbody>

  <% 
  foreach (var item in ((IEnumerable<FileInfoModel>)ViewData["FilesInfoView"]))
  { %>
  <tr>
  <td>
  <%: item.Name %>
  </td>
  <td>
  <%: item.Length %>
  </td>
  <td>
  <%: item.LastWriteTime %>
  </td>
  </tr>
  <% } %>
  </tbody>
  </table> 
  </div>

型号:

public class FileInfoModel
{     
    public string Name { get; set; }
    public double Length { get; set; }
    public DateTime LastWriteTime { get; set; }       
}

1 个答案:

答案 0 :(得分:4)

如果您的部分视图始终循环遍历FileInfoModelViewData的集合,那么对于仅仅 MUCH 更好吗?将它的模型类型设置为IEnumerable<FileInfoModel>并将其发送到局部视图?

此外,您需要对模型进行空检查,因为在渲染局部视图时,您的集合似乎为空。

像这样:

public ActionResult Upload()
{          
    var model = new List<FileInfoModel>(){

         new FileInfoModel(){Name = "sa",Length = 5, LastWriteTime = DateTime.Now},
         new FileInfoModel(){Name = "saa",Length = 5, LastWriteTime = DateTime.Now}
        };

    return View(model);
}

然后在视图的顶部,设置模型类型:

<% model IEnumerable<FileInfoModel> %>

然后更改您的foreach

if (Model != null)
{
    foreach (var item in Model)
    {
       //do stuff
    }
}