Нет, потому что никто не удосужился его реализовать. Но это было бы тривиально легко сделать. Например, как метод расширения (к сожалению, свойства расширения еще не поддерживаются в .NET, поэтому вы не можете получить синтаксис, на который вы, возможно, надеялись):
public class DynamicTempDataDictionary : DynamicObject
{
public DynamicTempDataDictionary(TempDataDictionary tempData)
{
_tempData = tempData;
}
private readonly TempDataDictionary _tempData;
public override IEnumerable<string> GetDynamicMemberNames()
{
return _tempData.Keys;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = _tempData[binder.Name];
return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
_tempData[binder.Name] = value;
return true;
}
}
public static class ControllerExtensions
{
public static dynamic TempBag(this ControllerBase controller)
{
return new DynamicTempDataDictionary(controller.TempData);
}
}
и затем:
public ActionResult Index()
{
this.TempBag().Hello = "abc";
return RedirectToAction("Foo");
}
Вопрос в том, зачем вам это и как это лучше / безопаснее, чем:
public ActionResult Index()
{
TempData["Hello"] = "abc";
return RedirectToAction("Foo");
}