c# - taghelper - (PartialView) L'elemento del modello passato nel dizionario è di tipo "Cliente", ma questo dizionario richiede un elemento del modello di tipo "Profilo utente"




partial taghelper (5)

Aggiungere la parola chiave "virtuale" alla proprietà UserProfile sul modello Cliente. È il modo più semplice per superare il carico pigro, ma le prestazioni ..

@model Customer

@Html.Partial("_UserProfile", (UserProfile)Model.UserProfile)

Quando eseguo questo codice, ottengo questo errore:

The model item passed into the dictionary is of type 'Customer', but this dictionary requires a model item of type 'UserProfile'.

Vista parziale _Profiloutente è fortemente digitato.

Voglio essere in grado di modificare questi campi. Eventuali suggerimenti?


Assicurati che Model.UserProfile non sia nullo.

Ho trovato il tuo post che cercava di eseguire il debug dello stesso errore, e si è scoperto che non avevo inizializzato il mio equivalente "Model.UserProfile".

Immagino che cosa sta succedendo qui, è che se un modello null viene passato a RenderPartial, per default utilizza il modello della vista principale? Qualcuno può confermarlo?


Ho affrontato lo stesso problema ma alla fine l'ho capito. C'è una mancata corrispondenza di tipo nei modelli passati. La tua vista accetta il modello di tipo Customer ma la vista parziale sta passando il modello Userprofile quindi quello che devi fare è passare lo stesso modello in entrambi o .... creare un modello che abbia tutti proprietà di entrambi i modelli. Sicuramente il tuo problema sarà risolto.


Mi sono imbattuto in questo problema quando si trattava di parti di un profilo utente come i record Nome e Indirizzo. Se l'utente ha un profilo incompleto, desidero che la vista di gestione dell'account rilevi un record di indirizzo nullo e visualizzi un link di azione per creare un nuovo indirizzo o visualizzare qualsiasi dato di indirizzo disponibile.

Come descritto da altri quando viene passato null, il sovraccarico per Html.RenderPartial viene attivato e viene passato il modello di visualizzazione principale. Ho finito per convertire le mie viste parziali in Modelli di visualizzazione e editor per aggirare il problema. Ecco alcuni articoli di How-To da: Hansleman e codeguru

Ottieni una migliore riutilizzabilità da questo metodo e conserva i valori nulli: Nella tua vista:

@Html.DisplayFor( m=> m.Address)

Quindi gestire il valore null in DisplayTemplate.

@model Namespace.Models.MyObject
...
if(@Model != null){
...
}else{
...
}

Si sta tentando di assegnare un oggetto di tipo Customer a un oggetto di tipo UserProfile . Di default questo non funzionerà in quanto il framework non ha idea di come lanciare questi oggetti. Se devi assolutamente farlo in questo modo, l'unica opzione è quella di fornire un operatore di cast esplicito come:

public static explicit operator Digit(byte b)  // explicit byte to digit conversion operator
{
    Digit d = new Digit(b);  // explicit conversion

    System.Console.WriteLine("Conversion occurred.");
    return d;
}

Puoi leggere di più here .





helper