Is there any way to clear the ViewBag
?
ViewBag
has no setter, so it can't simply be nulled out:
ViewBag = null;
I also can't seem to use reflection to iterate over it and wipe out its dynamic properties, as you can't create an instance of a dynamic
.
Note: I know ViewBag
on its own is a bit of a code smell as it's not strongly typed, and is basically a giant collection of global variables. And we're moving away from it, but still need to deal with it in the meantime.
You can just call
ViewData.Clear();
As ViewBag uses it internally.
Here is working example - https://dotnetfiddle.net/GmxctI . If you uncomment commented line, then displayed text will be cleared
Here is current implementation for ViewBag in MVC:
public dynamic ViewBag
{
get
{
if (_dynamicViewDataDictionary == null)
{
_dynamicViewDataDictionary = new DynamicViewDataDictionary(() => ViewData);
}
return _dynamicViewDataDictionary;
}
}
And part of that 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;
}
So as you can see it depends on ViewData
object