重定向到操作 - 操作主体未运行

时间:2013-12-31 21:52:32

标签: c# asp.net-mvc

我有一个带有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操作中(修改后显式命名我希望它返回的视图,因为它不再匹配操作)和有用。当然,这意味着我在多个地方复制相同的代码,所以我仍然想知道发生了什么。

0 个答案:

没有答案