我有一个带有Index方法的控制器,用于构建模型并将其传递给视图。撇开那种设计的智慧,它看起来像这样:
public async Task<ActionResult> Index()
{
IEnumerable<CustomViewModelObject> myListOfCustomViewModelObjects = await BuildListOfCustomViewModelObjectsAsync();
return View(myListOfCustomViewModelObjects);
}
即使IEnumerable为空,它也能正常工作。
但是,我有一个不同的方法附加到该列表,我发现null被传递到我的视图(myListOfCustomViewModelObjects应该在哪里),破坏了功能。该方法如下所示:
[HttpPost]
public async Task<ActionResult> AddSelf(AddSelfViewModel model)
{
//I'm trimming the part where this data is actually added
await DoWork();
return RedirectToAction("Index");
}
保存部分工作正常,但重定向导致null被传递,因此视图会抛出异常。如果我再次手动导航到索引,则没有问题。
发生了什么事?我该如何解决?
编辑:由于很多关注对事情完成顺序的评论,我不得不指出Index动作中的方法运行查询查找实体所拥有的由当前用户,然后将它们选择到ViewModel的IEnumerable中并将其提供给视图。 AddSelf正在添加一个由用户拥有的新实体。但是,我的问题是不 IEnumerable为空,或者它不包含新添加的实体。事实上,结果是相同的(当我直接指向Index并且在重定向中不起作用的方式时)是否存在与条件匹配的实体。
另一个编辑:我已将Index操作的主体复制到AddSelf操作中(修改后显式命名我希望它返回的视图,因为它不再匹配操作)和有用。当然,这意味着我在多个地方复制相同的代码,所以我仍然想知道发生了什么。