2009-04-29 11 views
1

ASP.NET MVCでデータ受け入れレイヤーを実装するために、Entities Frameworkを使用します。 Viewで問題が発生しました。オブジェクトのインスタンスに設定されていないASP.NET MVCでEntity Frameworkを使用するときの問題

オブジェクト参照:

私は、実行時にエラーを得た:のようなVIEW何かで私のコードは

説明現在のWeb要求の実行中に、未処理の例外が発生しました。エラーの詳細とコード内のどこで発生したのかについては、スタックトレースを参照してください。

例外の詳細:System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

ソースエラー:

ライン14:

15行目:<% = Model.FirstName%> 16行目:

17行目:

これは強い型付けされたビューテンプレートから生成されます。 web.configにモデル参照を追加しました。 LINQ to SQLを使用していたときにこのエラーが発生しませんでした

助けが必要ですか?

答えて

1

私はそれを理解しました! 問題がVIEW 通常にあった、それは()Html.BeginForm(新しい{ID = Model.Idを})を使用して、 だろう

データベースの主キーは区分が、あなたは、あなたがしなければならないと思うだろうだった場合、

ID = Model.CategoryID

にコードを適応させるしかし、実際には、あなたはこのようにそれを行う必要があります

使用(Html.BeginForm(新しい{区分= Model.CategoryID}))

それ以外の場合は、モデルに入力されません。

Resurge、help it hope!

0

コントローラにモデルが正しく設定されていないかのように見えます。あなたの質問には、正確に何がうまくいかないかについて十分な情報はありません。

+0

これは私が奇妙に感じたものです。私はもっ​​と情報を与えることはできません、私はすることはできません。私は<%= Html.Encode(Model.FirstName)%>を使用することができますが、 <%= Model.FirstName%> – Smallville

+0

ではありません。なぜそうなのかわかりません。モデル? –

2

回答にはコメントできませんので、新しい回答で回答します。 あなたの属性は「FirstName」と呼ばれていますが、thisチュートリアルを実行しようとしていますか? これは問題がある編集アクションですか?

これはまったく同じ問題で、私のクラスメートの2人が持っているので。

[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}

IはApplyPropertyChanges前に、この行を追加します。

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

xが正しいタイプのエントリが含まれません。 (debug image

注:チュートリアルから少しずれて、エンティティオブジェクトをスーパークラスに入れて、すべてのコントローラで同じオブジェクトを宣言する必要はありません。しかし、チュートリアルの後に同じ問題が発生します。

0

.FirstOrDefault()というメソッドを持つselectステートメントが有効なオブジェクトを持っていないため、モデルがnullです。

いつでも.FirstOrDefault().First()に変更し、ソリューションを再コンパイルすることができます。

関連する問題