【问题标题】:MVC Contrib PassParametersDuringRedirect - stop values persisting past first redirectMVC Contrib PassParametersDuringRedirect - 停止值在第一次重定向之后持续存在
【发布时间】:2011-06-02 23:07:17
【问题描述】:

MVcContrib 的新手,所以也许我使用不正确,但我在使用 PassParametersDuringRedirect 属性时遇到了问题。

我遇到的问题是,正如预期的那样,当我第一次重定向时,参数值被正确传递,问题是在此之后这些值仍然存在,而如果我使用 TempData(我不想这样做),则这些值仅在第一次调用时保持不变。

代码如下。当我填充 model.ErrorMessage 然后重定向到 Shelf 时,一切都按预期工作,但是对 Shelf 的所有后续调用仍然填充了 ErrorMessage。

[PassParametersDuringRedirect] 公共类 NewCapitalStructureController : BaseController { private readonly IShelfService ShelfService;

    public NewCapitalStructureController(IRepository repository, IPrincipalProxy principal, IShelfService shelfService)
        : base(repository, principal)
    {
        this.shelfService = shelfService;
    }

    public ActionResult Shelf(NewCapitalStructureViewModel model)
    {

        if (model == null)
            model = new NewCapitalStructureViewModel();
        return View("Shelf", model);
    }

    public ActionResult SaveShelf(NewCapitalStructureViewModel newCapitalStructureViewModel)
    {
        var result = shelfService.CreateShelf(newCapitalStructureViewModel.ShelfName);
        var model = new NewCapitalStructureViewModel();
        model.ShelfID = result.ID;
        if (!result.Success)
            model.ErrorMessage = result.Message;
        return this.RedirectToAction(x=> x.Shelf(model));
    }

【问题讨论】:

  • 我们也刚开始使用此属性,并注意到同样的问题。查看PassParamtersDuringRedirectAttribute.cs的源码:filterContext.Controller.TempData.Keep(storedParameter.Key);

标签: c# asp.net-mvc mvccontrib


【解决方案1】:
public ActionResult Shelf(NewCapitalStructureViewModel model)
{
    if (model == null)             
        model = new NewCapitalStructureViewModel(); 
    ControllerContext.Controller.TempData.Clear();      
    return View("Shelf", model);
} 

这将清除 TempData 中的所有参数。

【讨论】:

    【解决方案2】:

    为了解决这个问题,我创建了一个新属性(同样继承自 ActionFilterAttribute)并用新属性修饰了上面的 Shelf 方法:

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        base.OnResultExecuted(filterContext);
        filterContext.Controller.TempData.Clear();
    }
    

    我很想知道我是否在某个地方出错了。

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      相关资源
      最近更新 更多