Domanda

Sfondo

Ricevo il seguente errore quando si cerca di rendere una vista parziale in ASP.NET MVC. Sono nuovo di ASP.NET MVC e sono sicuro che l'errore è semplice da risolvere e solo deriva dalla mia mancanza di comprensione completa.

Domanda ( per chi non vuole leggere tutto ):

Qual è la causa di questo errore?

  

Dettagli eccezione:   System.InvalidOperationException:   L'articolo modello di passato nel   dizionario è di tipo   'MyApp.Models.ClassroomFormViewModel'   ma questo dizionario richiede un modello   articolo dello stesso tipo   'System.Collections.Generic.IEnumerable1 [MyApp.Models.ClassroomFormViewModel] ' `.


entités

Ho due entità con una relazione padre / figlio.

Classroom                   StickyNote 
------------                -----------
Id          1 -----         Id
Name               \        Name
(...)               \       Content
                     ---- * ClassroomID

Modello

Nel Model il contenuto StickyNote è conservata in una tabella diversa, e accessibili (utilizzando Linq-to-SQL tramite il seguente metodo:

public IQueryable<StickyNote> GetStickyNotesByClassroom(Classroom classroom)
{
     return from stickynote in db.StickyNotes
            where stickynote.ClassroomID == classroom.ID
            select stickynote;
}

Errore

Ho creato una vista parziale per visualizzare il contenuto StickyNote dal momento che 'appartiene' in classe è su. Il problema che sto funzionando in è che io non sono in grado di farlo per visualizzare, e visualizzato il seguente errore:

  

La voce del modello passato nel   dizionario è di tipo:   'MyApp.Models.ClassroomFormViewModel'   ma questo dizionario richiede un modello   articolo dello stesso tipo   'System.Collections.Generic.IEnumerable1 [MyApp.Models.ClassroomFormViewModel] ' `.   Descrizione: un'eccezione non gestita   durante l'esecuzione del   richiesta Web corrente. Si prega di rivedere la   Analisi dello stack per ulteriori informazioni su   l'errore e dove ha avuto origine in   il codice.

     

Dettagli eccezione:   System.InvalidOperationException:   L'articolo modello di passato nel   dizionario è di tipo   'MyApp.Models.ClassroomFormViewModel'   ma questo dizionario richiede un modello   articolo dello stesso tipo   'System.Collections.Generic.IEnumerable1 [MyApp.Models.ClassroomFormViewModel] ' `.

Vista parziale

Ecco il codice vista parziale:

<%@ Control Language="C#" Inherits="
System.Web.Mvc.ViewUserControl<IEnumerable<MyApp.Models.ClassroomFormViewModel>>" %>

    <table background="../../images/corkboard.jpg">

    <% foreach (var items in Model) { %>

        <tr>
        <% foreach (var item in items.StickyNotes) { %>
            <td><div class="sticky_note_container">

<!-- actually use a post it note here on the page -->
<div class="sticky_note">
<div class="sticky_note_content">
<!-- content of sticky note here -->
<% Html.ActionLink(item.Name, "ShowStickyNoteContent"); %>
<!-- end of content of sticky note -->
</div>
</div>
<div class="sticky_note_footer">&nbsp;</div>
<br clear="all" />
</div>
         </td>
      <% } %>
     </tr>
   <% } %>
</table>

Parent Visualizza

E il codice dall'altro View che lo chiama:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits=
"System.Web.Mvc.ViewPage<MyApp.Models.ClassroomFormViewModel>" %>
{...}
  <% 
     Html.RenderPartial("StickyNotes", Model);
  %>
È stato utile?

Soluzione

Si passa a una singola istanza del vostro ClassroomFormViewModel in e la vista è aspettate un una collezione vale a dire IEnumerable<ClassroomFormViewModel>.

Cambia la tua dichiarazione nella vostra PartialView a

Inherits="
System.Web.Mvc.ViewUserControl<MyApp.Models.ClassroomFormViewModel>"

o

Che cosa si vuole veramente (dopo molto guardando il codice) è un IEnumerable<ClassroomFormViewModel>

in modo che il modello in vostro pagina chiamante deve essere di IEnumerable<ClassroomFormViewModel>

In sostanza si sta cercando di fare questo

public void Render(ClassroomFormViewModel model)
{
    RenderPartial(model) //Cannot cast single instance into an IEnumerable
}
public string RenderPartial(IEnumerable<ClassroomFormViewModel> model)
{
    //Do something
}

Altri suggerimenti

Il parziale dovrebbe iniziare

<%@ Control Language="C#" Inherits="
System.Web.Mvc.ViewUserControl<MyApp.Models.ClassroomFormViewModel>" >

Credo che si desidera visualizzare una classe su di voi pagina. Se si desidera visualizzare più allora non usare un elenco di ViewModel. Utilizzare uno ViewModel che ha una lista di aule

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top