为什么RedirectToAction没有效果

时间:2012-11-23 16:25:33

标签: asp.net-mvc-3 asp.net-mvc-routing

当调用带条形码参数的方法时,RedirectToAction绝对没有效果。我可以看到它确实返回到URL中的那条路线,但模型没有刷新,它显示过时的数据。

在SQL Server探查器中,我可以看到没有进行调用以撤回新数据。

我如何强制这种情况发生?

很明显,对public ActionResult SRScanItem(string barcode)的调用本身就是来自另一个控制器的RedirectToAction的结果。

我在同一个控制器的其他地方有一些RedirectToAction("SRPickCollectionItems")的调用,这些都可以正常工作。

知道可能导致这种情况的原因吗?

public ActionResult SRPickCollectionItems()
{
    IEnumerable<ISRPickingItemSummary> items = 
        SRPickingItemsViewModel.
        GetDisplayableChunk(ApplicationState.CollectionId.ToString(),
                            ApplicationState.AssistantNumber);

    return View(items);            
}

public ActionResult SRScanItem(string barcode)
{
    DataLayer.Instance.AddStockroomFoundItem(barcode, ApplicationState.CollectionId, ApplicationState.AssistantNumber);
    return RedirectToAction("SRPickCollectionItems");   
}

2 个答案:

答案 0 :(得分:2)

也许重定向会转到缓存页面。

你能尝试用

装饰SRPickCollectionItems吗?
[OutputCache(Duration = 0)]

答案 1 :(得分:1)

你似乎没有返回post方法,只是一个get,因此除非你通过actionlink在get调用中将条形码作为查询字符串参数发送,否则调用Redirect的方法并不明显或链接标记。

通常你会有两个名为SRPickCollectionItems的方法。 Get方法(您已经拥有)加载视图,post方法(您缺少)处理回发。那么post方法就是......

[HttpPost]
public ActionResult SRPickCollectionItemsstring barcode){
    DataLayer.Instance.AddStockroomFoundItem(barcode, ApplicationState.CollectionId,              ApplicationState.AssistantNumber);
    return RedirectToAction("SRPickCollectionItems");   
}