Если есть ViewBag для ViewData, почему нет TempBag для TempData? - PullRequest
2 голосов
/ 14 июня 2011

Почему для TempData нет динамического словарного объекта, как для ViewData?

1 Ответ

4 голосов
/ 14 июня 2011

Нет, потому что никто не удосужился его реализовать. Но это было бы тривиально легко сделать. Например, как метод расширения (к сожалению, свойства расширения еще не поддерживаются в .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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...