2009-04-29 106 views
1

我使用實體框架在ASP.NET MVC中實現我的數據accsee層。我在View中遇到問題。在ASP.NET MVC中使用實體框架時的問題

當我在VIEW類似代碼:

我在運行時出現錯誤:未設置爲一個對象的實例

對象引用。

描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.NullReferenceException:未將對象引用設置爲對象的實例。

源錯誤:

線14:

線15:<%= Model.FirstName%> 第16行:

第17行:

這是從強類型的視圖模板生成。 我確保我添加了模型referrence到web.config 我沒有遇到這個錯誤,當我使用LINQ to SQL

任何幫助嗎?

回答

1

我想通了! 問題是在VIEW 通常情況下,這將是, 使用(Html.BeginForm(新{ID = Model.Id}))

如果在你的數據庫中的主鍵是類別ID,你會覺得你應該代碼適應

編號= Model.CategoryID

但實際上,你應該像這樣做,

使用(Html.BeginForm(新{類別ID = Model.CategoryID}))

否則,它不會填充模型。

重振,希望它有幫助!

0

它看起來好像您的模型未在控制器中正確填充。你的問題中沒有足夠的信息來確定究竟發生了什麼問題。

+0

這就是我發現的奇怪。我無法提供更多信息,因爲我不能。我可以使用<%= Html.Encode(Model.FirstName)%>但不是 <%= Model.FirstName%> – Smallville 2009-04-29 13:04:17

2

因爲我不能評論一個答案,我會通過一個新的答案做到這一點.. 我注意到你的屬性被稱爲「名字」,你有沒有嘗試做this教程? 這是您遇到問題的編輯操作?

因爲這與我和我的同班同學所面對的問題完全相同。 這是問題的更詳細的解釋:

這是控制器的動作:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(Contact contactToEdit) { 
    if (!ModelState.IsValid) 
     return View(); 

    try { 
     var originalContact = (from c in base._entities.ContactSet 
           where c.Id == contactToEdit.Id 
           select c).First(); 
     base._entities.ApplyPropertyChanges(originalContact.EntityKey.EntitySetName, contactToEdit); 
     base._entities.SaveChanges(); 

     return RedirectToAction("Index"); 
    } catch(Exception e) { 
     return View(); 
    } 
} 

當ApplyPropertyChanges被稱爲exception提高。 (InvalidOperationException異常) 異常消息:

{System.InvalidOperationException: The ObjectStateManager does not contain an ObjectStateEntry with a reference to an object of type 'ContactManager.Models.Contact'.
at System.Data.Objects.ObjectContext.ApplyPropertyChanges(String entitySetName, Object changed)
at ContactManager.Controllers.HomeController.Edit(Contact contactToEdit) in C:\Users\Jeroen\Desktop\ContactManager\ContactManager\ContactManager\Controllers\HomeController.cs:line 65}

當添加ApplyPropertyChanges之前這一行:

System.Data.Objects.ObjectStateEntry x = base._entities.ObjectStateManager.GetObjectStateEntry(originalContact); 

X確實含有正確類型的一個條目。 (debug image

注:我做了一個從教程的小偏差,並把實體對象放在一個超類,所以我不必在我所有的控制器中聲明相同的對象。但遵循教程時會出現同樣的問題。

0

有時模型爲空,因爲帶有方法.FirstOrDefault()的select語句沒有帶來有效的對象。

您可以隨時將.FirstOrDefault()更改爲.First()並重新編譯您的解決方案。