Очистить ViewBag?
есть ли способ очистить ViewBag
?
ViewBag
не имеет сеттера, поэтому его нельзя просто обнулить:
ViewBag = null;
Я также не могу показаться, чтобы использовать отражение перебирать его и уничтожать его динамические свойства, так как вы не можете создать экземпляр dynamic
.
примечание: Я знаю ViewBag
сам по себе является немного запахом кода, поскольку он не сильно типизирован и в основном представляет собой гигантскую коллекцию глобальных переменных. И мы движемся подальше от этого, но все равно нужно разобраться с этим в то же время.
1 ответов
вы можете просто позвонить
ViewData.Clear();
как ViewBag использует его внутренне.
вот рабочий пример -https://dotnetfiddle.net/GmxctI . Если вы раскомментируете строку комментария, то отображаемый текст будет очищен
здесь текущая реализация для ViewBag в MVC:
public dynamic ViewBag
{
get
{
if (_dynamicViewDataDictionary == null)
{
_dynamicViewDataDictionary = new DynamicViewDataDictionary(() => ViewData);
}
return _dynamicViewDataDictionary;
}
}
// Implementing this function improves the debugging experience as it provides the debugger with the list of all
// the properties currently defined on the object
public override IEnumerable<string> GetDynamicMemberNames()
{
return ViewData.Keys;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = ViewData[binder.Name];
// since ViewDataDictionary always returns a result even if the key does not exist, always return true
return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
ViewData[binder.Name] = value;
// you can always set a key in the dictionary so return true
return true;
}
так как вы можете видеть, это зависит от ViewData
объект