ViewBag是DynamicViewDataDictionary,它繼承DynamicObject
。使用「GetDynamicMemberNames」獲取密鑰很簡單,但獲取值稍爲冗長。下面的ViewBag轉換成詞典(無恥地剽竊從借Aaronaught's answer here):
var values = new Dictionary<string, object>();
IEnumerable<string> keys = ViewBag.GetDynamicMemberNames();
foreach (string key in keys)
{
var binder = Microsoft.CSharp.RuntimeBinder.Binder.GetMember(
CSharpBinderFlags.None, key,
ViewBag.GetType(),
new[] { CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) });
var callsite = CallSite<Func<CallSite, object, object>>.Create(binder);
var val = callsite.Target(callsite, ViewBag);
values.Add(key, val);
}
我覺得完全報廢Viewbag。
這聽起來像個好主意 - 儘可能使用強類型的視圖模型。
你可以使用類似JSON.NET的序列化它? – DavidN
我還沒有看過JSON.NET。你能否指出這將會是怎樣的可能? –
是的,完全棄用'ViewBag'或將其保留爲瑣碎的情況,在每次執行操作方法時都很容易重新填充。 –