2010-07-27 74 views
3

的一個實例。在這行代碼對象引用不設置爲一個對象

<% var tmp = int.Parse(ViewData["numOfGroups"].ToString()); %> 

我有錯誤:Object reference not set to an instance of an object。如何正確轉換

ViewData["numOfGroups"]int

+0

可能的重複[什麼是NullReferenceException,以及如何解決它?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-doi-i-fix -it) – 2017-01-11 10:26:20

回答

5

你應該首先確保你的控制器動作設置此變量:

public ActionResult Index() 
{ 
    ViewData["numOfGroups"] = "15"; 
    return View(); 
} 

一旦你做到了這一點,你應該不會再得到一個NullReferenceException和你的代碼應該工作。

當然,因爲我已經在這裏多次寫過它,所以您應該更喜歡強類型視圖而不是ViewData。你也應該相應地輸入你的模型屬性。解析字符串不是視圖的責任。所以:

public ActionResult Index() 
{ 
    var model = new MyModel 
    { 
     NumOfGroups = 15 
    }; 
    return View(model); 
} 

而在你的看法:

<% var tmp = Model.NumOfGroups; %> 

通過這也應避免的方式,因爲我有,你是宣佈在您的視圖變量的感覺,這意味着你的意圖使用它們。視圖不是用於聲明變量和編寫C#代碼。他們是標記。

0

似乎ViewData["numOfGroups"]爲空。這個問題很可能不是轉換本身,而是在ViewData["numOfGroups"].ToString()

1

如果錯誤與將ViewData["numOfGroups"]轉換爲int相關,那麼您將得到FormatException。檢查你是否真的將數據傳遞給視圖,並且它包含numOfGroups鍵。

0

由於ViewData字典包含<string, object>你要做的拆箱的價值:

int tmp = (int)ViewData["numOfGroups"]; 

,但檢查的對象是空的第一或環繞通過try/catch語句,如果有任何機會轉換將不會工作。 。 ...或使用TryParse(),如果轉換成功或不成功,則返回bool。

+0

你的代碼不會編譯我猜你的意思是(int)ViewData [「numOfGroups」],但是它仍然是一個空引用異常。發佈的代碼OP中最可信的空引用異常是ViewData [「NoOfGRoups」]爲空。 – 2010-07-27 09:51:07

+0

編輯,感謝您的觀察.... – TheBoyan 2010-07-27 12:00:16

相關問題