2012-12-18 12 views
74

Recentemente ho iniziato a giocare con ASP.net MVC (4), ma non riesco a comprendere il problema che sto affrontando. Sono sicuro che è facile quando lo sai.Utilizzo di viste parziali in ASP.net MVC 4

sto essenzialmente cercando di fare la seguente, a mio avviso Index:

  1. Lista le voci correnti nel database di tipo "Note" nella vista indice (che è facile)
  2. Creazione di un nuovo articoli nella stessa vista indice (non così facile).

così ho pensato che mi serviva una vista parziale, e che ho creato come segue (_CreateNote.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> 
} 

A mio avviso originale Index (Index.cshtml) sto cercando di rendono questa vista parziale:

@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> 

(utilizzando: @ Html.Partial ("_ CreateNote")) Tuttavia. Questo non sembra funzionare, come ottengo il seguente messaggio di errore:

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 

mio NotesController si presenta così:

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"); 
} 

Io penso che abbia a che fare con il fatto che la vista è Index usando diversamente il modello, come in @model IEnumerable, ma non importa come lo cambio, usando RenderPartial, RenderAction, cambiando ActionResult a ViewResult ecc., non riesco a farlo funzionare.

Qualsiasi consiglio sarebbe molto apprezzato! Per favore fatemi sapere se avete bisogno di ulteriori informazioni. Sarei felice di comprimere l'intero progetto, se necessario.

risposta

122

Modificare il codice in cui si carica la vista parziale:

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

Questo perché la vista parziale si aspetta una nota, ma è sempre passato il modello della vista padre che è il IEnumerable

+5

Lei ha ragione! Molte grazie! In realtà ho provato quasi lo stesso un sacco di volte, ma non ho capito che avevo bisogno della "nuova" affermazione. Stupido me :( –

37

Stai passando lo stesso modello alla vista parziale mentre passi alla vista principale, e sono tipi diversi. Il modello è un DbSet di Note s, in cui è necessario passare in un singolo Note.

Si può fare questo con l'aggiunta di un parametro, che sto cercando di indovinare come è la forma creare sarebbe un nuovo Note

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

Sì, corretto! Sembra che mi siano persi alcuni fondamentali di MVC. Grazie! –

Problemi correlati