我搜索过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岁才能投票。 谢谢!
答案 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
您是否尝试过调试以查看代码采用的流程?