gpt4 book ai didi

ASP.NET MVC - 对象引用未设置为对象的实例

转载 作者:行者123 更新时间:2023-12-02 06:18:00 33 4
gpt4 key购买 nike

我最近接管了一个 ASP.NET MVC 项目的支持,并且正在尝试解决一些错误,但其中一个错误尤其让我感到难过。

我们有一个“新建”页面来添加新项目,发布页面时运行以下代码:

[HttpPost]
public ActionResult New(RecordView i)
{
if(ModelState.IsValid)
{
repository.AddRecord(i.DogIncident);

return View("Index");
}
return View("Index");
}

但是,当它尝试加载索引 View 时,出现以下错误:“对象引用未设置为对象的实例。” 并且它指向以下代码块RecordsView.cshtml 文件的顶部:

@for (var i = 0; i < Model.Records.Count; i++)

虽然记录确实添加正确,但它只是没有正确加载列表页面,并且由于这只是一个“不错的选择”,我想我可以通过更改它来简化事情,以便它返回一些文本生成错误,因为它期望返回一个 bool 值。

关于如何解决这个问题有什么想法吗?我很难过。

谢谢!

最佳答案

这里的代码流程看起来不对:

[HttpPost]
public ActionResult New(RecordView i)
{
if(ModelState.IsValid)
{
repository.AddRecord(i.DogIncident);

return View("Index");
}
return View("Index");
}

根据您上面的描述,听起来好像您是从您的 New 发帖查看,对此New操作,然后应该在成功时重定向到您的 Index行动。目前,上面的代码没有这样做,如果模型无效,它也无法重新显示表单。它应该看起来更像这样:

[HttpPost]
public ActionResult New(RecordView i)
{
if(ModelState.IsValid)
{
repository.AddRecord(i.DogIncident);

return RedirectToAction("Index");
}

// Redisplay the `New` view, passing the model
// back to it in order to repopulate the form
return View(i);
}

return View(...) 之间的重要区别和 return RedirectToAction(...)是后者将运行操作 返回关联的 View 。前者只会返回 View 。这意味着如果 Index action 构建模型,并将其传递给 Index View ,如果您只是返回 View ,这些都不会发生。

你当然可以这样做:

return View("Index", new YourModelType());

但是如果如上所述,您的 Index 是行不通的action 为您的模型执行一些其他数据构建,例如构建下拉列表,new YourModelType()不会的。

此外,当发送到 POST 操作的数据有效时,您应该重定向到另一个操作(正如我上面所做的),而不是简单地返回一个 View ,以符合 Post-Redirect-Get模式,可防止某些类型的重复表单提交。

关于ASP.NET MVC - 对象引用未设置为对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21025792/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com