NullReferenceException:未将对象引用设置为对象的实例

时间:2010-12-17 05:47:46

标签: asp.net-mvc

我搜索过SO以寻找类似的帖子,并且在任何给定的解决方案中都没有成功。所以我再次发布了这个。

我试图在此Controller Action中将一些信息发布回数据库。在视图上单击“保存”按钮时,将调用此操作。

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult EditDetail(int id, FormCollection fvals)
    {
        Environments env = environmentsRepository.GetEnvironmentDetail(id);
        UpdateModel(env);
        environmentsRepository.Save();
        return RedirectToAction("List", new RouteValueDictionary(new 
        {controller="Environments", action="List", id = 1}));  
    }

当我点击“保存”按钮时,出现以下错误:

第32行:
第33行:
第34行:<%foreach(模型中的var环境)< - 此行中的错误
第35行:{%>
第36行:

[NullReferenceException: Object reference not set to an instance of an object.]
   ASP.views_environments_list_aspx.__RenderContent2(HtmlTextWriter __w, Control     parameterContainer) in e:\code\ossp\WebUI\Views\Environments\List.aspx:34

请让我知道我错过了什么?如何解决错误?

列表视图: http://pastebin.ubuntu.com/544767/
清单行动: http://pastebin.ubuntu.com/544768/

解决:
我已经意识到我将错误的参数'id'而不是'page'传递给List视图。

感谢大家的指点。由于这次讨论,我能够学到很多东西。不幸的是,我仍然在11岁才能投票。 谢谢!

2 个答案:

答案 0 :(得分:2)

问题是,在EditDetail内,您最终会重定向到List控制器的Environments操作,我认为此操作会呈现强类型视图。问题是您传递给视图的模型为null。因此,您的控制器操作可能如下所示:

public ActionResult List(int id)
{
    var model = FetchModelFromSomewhere(id); // this probably returns null here
    return View(model);
}

在你的视图中,你试图枚举模型为null:

<% foreach (var environment in Model) { %>

你得到了例外。因此,请确保传递给List视图的模型不为空。

答案 1 :(得分:1)

“Page”没有值,因此Ahmad指出你看起来像是按照ELSE返回一个空视图

if (page.HasValue)
    return View(environmentsRepository.Environments.Skip(((int)page - 1) * PageSize).Take(PageSize).ToList());
else
    return View(); ///TODO Handle This

您是否尝试过调试以查看代码采用的流程?