据我了解,TempData 设计为仅在单个页面请求之间工作。但我认为有一种情况破坏了预期的功能。
我优先使用 Controller 而不是处理程序来传递图像。我现在不知道这是否是最佳实践,但它对我来说非常有效。但问题是,对图像操作之一的每次调用显然都会耗尽 TempData 积分。
MVC 中有没有办法说“此 Controller /操作超出了正常页面请求的范围”,因此要么保留 TempData,要么将其自身完全从 TempData 生命周期中删除?
丰富
最佳答案
我的解决方案是创建一个在页面请求之间保留 TempData 的属性。我对此的最初 react 是“恶心”,但我想有效地从 TempData 生命周期中排除任何用该属性修饰的 Controller 。
using System.Web.Mvc;
namespace K3R.Web.Mvc.Filters {
public sealed class PersistTempDataAttribute : ActionFilterAttribute {
public PersistTempDataAttribute() { }
public override void OnActionExecuting(ActionExecutingContext filterContext) {
var tempData = filterContext.Controller.TempData;
if (tempData == null || tempData.Count == 0)
return;
string[] keys = new string[tempData.Keys.Count];
tempData.Keys.CopyTo(keys, 0);
foreach (var key in keys)
tempData[key] = tempData[key];
}
}
}
任何有关更好解决方案的反馈将不胜感激。
丰富
关于asp.net-mvc - 告诉操作/ Controller 保留 TempData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1666760/