2012-12-18 16 views
74

最近、ASP.net MVC(4)で再生を開始しましたが、この問題を回避することはできません。あなたがそれを知っているのは簡単だと確信しています。私は基本的に私のIndexビューで、次のやろうとしているASP.net MVCで部分ビューを使用する4

  1. リスト指数ビューのタイプ「注意」のデータベース内の現在の項目(それは簡単です)
  2. 新しい作成同じ索引ビュー内の項目(それほど簡単ではありません)。

だから、私は(_CreateNote.cshtml)を以下のように作成されていることを、私は部分的なビューを必要と考え出し、そして:私のオリジナルIndexビュー(Index.cshtml)で

@model QuickNotes.Models.Note 
@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 

<fieldset> 
    <legend>Note</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Content) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Content) 
     @Html.ValidationMessageFor(model => model.Content) 
    </div> 
    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 
} 

私がしようとしています

@model IEnumerable<QuickNotes.Models.Note> 


@{ 
    ViewBag.Title = "Personal notes"; 
} 

<h2>Personal notes</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 

<table> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.Content) 
     </th> 
     <th></th> 
    </tr> 

    @foreach (var item in Model) { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.Content) 
      </td> 
      <td> 
       @Html.ActionLink("Edit", "Edit", new { id=item.ID }) | 
       @Html.ActionLink("Details", "Details", new { id=item.ID }) | 
       @Html.ActionLink("Delete", "Delete", new { id=item.ID }) 
      </td> 
     </tr> 
    } 
</table> 

<div> 
    @Html.Partial("_CreateNote") 
</div> 

(使用して:@ Html.Partial( "_ CreateNote")) しかし、この部分ビューをレンダリングします。私はそれがインデックスビューであるという事実に関係していると思います

public ActionResult Index() 
{ 

    var model = _db.Notes; 

    return View(model); 
} 

// 
// GET: /Notes/Create 

public ActionResult Create() 
{ 
    return View(); 
} 

// 
// GET: /Notes/_CreateNote - Partial view 
public ViewResult _CreateNote() 
{ 
    return View("_CreateNote"); 
} 

Line 35: 
Line 36: <div> 
Line 37:  @Html.Partial("_CreateNote"); 
Line 38: </div> 

Source File: c:\Dropbox\Projects\workspace .NET MVC\QuickNotes\QuickNotes\Views\Notes\Index.cshtml Line: 37 

Stack Trace: 


[InvalidOperationException: The model item passed into the dictionary is of type 'System.Data.Entity.DbSet`1[QuickNotes.Models.Note]', but this dictionary requires a model item of type 'QuickNotes.Models.Note'.] 
    System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value) +405487 

マイNotesControllerの次のようになります。これは、私は次のエラーメッセージを取得すると、動作するようには思えません@ Model IEnumerableのようにモデルを使い分けていますが、RenderPartial、RenderAction、ActionResultをViewResultなどに変更しても、どのように変更しても動作させることはできません。

ヒントをお聞かせください。 詳細情報が必要な場合はお知らせください。私は、必要に応じてプロジェクト全体を解凍して嬉しいです。

答えて

122

変更あなたが部分図を読み込むコード:パーシャルビューは注意を期待しているが、IEnumerableを

+5

だろうだと私は推測しているパラメータを追加することによってこれを行うことができます!どうもありがとう!私は実際にはほとんど同じ時間を試みましたが、私は "新しい"声明が必要だったとは思わなかった。愚かな私:( –

37

ある親ビューのモデルを渡さなっているためです

@Html.Partial("_CreateNote", new QuickNotes.Models.Note()) 

あなたはメインビューに渡されているのと同じモデルを部分ビューに渡しています。それらは異なるタイプです。モデルはDbSetNoteです。ここでは単一のNoteを渡す必要があります。

あなたはそれを作成するフォームはあなたが正しい新しいNote

@Html.Partial("_CreateNote", new QuickNotes.Models.Note()) 
+0

ええ、正しい!私はいくつかのMVCのファンダメンタルズを逃したようだ。ありがとう! –

関連する問題