2009-05-15 22 views
3

ASP.NET MVCで表示する配列データをバインドしたいのですが、どうすればできますか?ASP.NET MVCビューにカスタムモデルをバインドする方法

申し訳ありませんが、私の質問についてはっきりしません。 今、私はカスタムオブジェクト(アレイではない)を作成し、Viewに渡そうとしましたが、エラーが表示されます

"辞書に渡されたモデルアイテムは 'ContactView'タイプですが、タイプ 'System.Collections.Generic.IEnumerable'のアイテム

+0

Eric、エラーメッセージは何が間違っているかを正確に示しています。カスタムオブジェクト(配列ではありません)を渡していますが、オブジェクトのジェネリックコレクションが必要です。 –

答えて

6

あなたはViewData []を使うことができますが、実際にはビュークラスを作成して返すのが最善の方法です。

データを送信するビューを連絡先といいます。新しいViewクラスを作成し、それを返します。そうこれに代えて:

public ActionResult Contacts(){ 
    ViewData["contacts"] = arrayOfContacts[]; 
    ... 
    return View(); 
} 

あなたはこれを行うことによって、強く型付けされたビューを取得することができます:

public class ContactsView(){ 
    Object[] ContactsList {get;set;} 
} 

public ActionResult Contacts(){ 
    ... 
    return View(new ContactsView(){ 
     ContactsList = arrayOfContacts[]; 
    }); 
} 

次に実際のビューでは、あなたがそれを強く型ContactsViewのオブジェクトを受け入れることによって入力することができます。実際のビューでそのように、それはそうのように継承している:あなたは、配列のように呼び出すことができます

... Inherits="System.Web.Mvc.ViewPage<ContactsView>" ... 

...

Model.ContactsList 

をこれに対立するものとして:

object[] arrayOfItems = (Object[])ViewData["theContactsList"]; 

どのような場合には、nullでないかどうかチェックしたいと思うかもしれません。リファクタリングすれば、ずっと簡単です。強く型付けされたオブジェクトの使用の容易さとタイプのセキュリティはもちろんですが。

+0

申し訳ありませんが私の質問については明確ではありません。 今、私はカスタムオブジェクトを作成し、Viewに渡そうとしましたが、エラーが表示されます "辞書に渡されたモデルアイテムは 'ContactView'タイプですが、この辞書には 'System.Collections .Generic.IEnumerable " – Smallville

+0

IEnumerable(つまりリスト、辞書など)を厳密に型指定するように指示したページを作成したときのようです。あなたのビューの最初の行は何を言っていますか? <%Page = "... ..." Inherits = "System.Web.MVC.ViewPage " ... />のようなものでなければなりません。 Inherit = "System.Web.MVC.ViewPage >" – MunkiPhD

+0

+1これは本当にいい説明です。私が見た唯一の例は、すべての規則を明確に示しています。 –

0

ViewDataに入れ、for..eachを使用してループしますか?このリンクで

関連する問題