2014-04-02 39 views
4

MVC,有時我設置的ViewBag特定屬性:爲什麼當屬性不存在時,ViewBag.SomeProperty不會引發異常?根據一些condition.For例如

if(someCondition) 
{ 
    // do some work 
    ViewBag.SomeProperty = values; 
} 

return View(); 

在我View我檢查屬性是否爲null這樣的:

@if(ViewBag.SomeProperty != null) 
{ 
    ... 
} 

直到現在我想這應該拋出例外,因爲如果我的條件不滿意,那麼SomeProperty永遠不會被設置。這就是爲什麼我總是使用else語句將該屬性設置爲null。但我只注意到,它不會拋出一個異常即使該屬性不存在。例如在Console Application如果我做以下操作,我得到一個RuntimeBinderException

dynamic dynamicVariable = new {Name = "Foo"}; 

if(dynamicVariable.Surname != null) Console.WriteLine(dynamicVariable.Surname); 

但是,當涉及到ViewBag。什麼是對區別它不會發生?

回答

7

AFAIK ViewBag是圍繞ViewData的動態包裝。而ViewData本身檢索值如下:

public object this[string key] 
{ 
    get 
    { 
     object value; 
     _innerDictionary.TryGetValue(key, out value); 
     return value; 
    } 
    set { _innerDictionary[key] = value; } 
} 

因此,如果鍵不存在,類型返回默認值,不會拋出異常。

1

ViewBag從DynamicViewDataDictionary繼承,它對缺少的屬性返回null。

相關問題