Problème avec différents type de modèle en vue partielle
J'en ai un (rasoir) page contenant 5 différentes vues partielles. Chaque partie est responsable de certaines des données à partir de la base de données. Dans cette page, j'utilise un modèle objet, mais pour une vue partielle sur je utiliser différents objets de modèle. Le problème est que lorsque j'ai mis le modèle de l'objet dans la vue partielle de ma demande rompt avec l'erreur suivante:
L'élément de modèle adopté dans le dictionnaire est de type 'MyProject.WebUI.Models.BigPageViewModel', but this dictionary requires a model item of type 'MyProject.WebUI.Models.StatisticsViewModel'.
Voici le code:
C'est la plus grosse page qui contient des vues partielles:
@model MyProject.WebUI.Models.BigPageViewModel
@{
Layout = "../Shared/_BigPage.cshtml";
}
...
@{Html.RenderPartial("../Data/StatisticsFeed");}
...
C'est le contrôleur de code. Pour cette méthode, j'ai créé vue partielle qui doit être affiché en gros la page.
public ActionResult StatisticsFeed()
{
StatisticsViewModel cs = new StatisticsViewModel();
cs.TotalData = (new StatisticsRepository()).GetStatisticCompleteData(1);
return View(cs);
}
Et c'est le code de la vue partielle:
@model MyProject.WebUI.Models.StatisticsViewModel
...
J'ai utilisé "RenderAction" méthode "au lieu de "RenderPartial' et de sa valeur de retour, mais me renvoie deux résultats obtenus avec les données et l'autre sans, ce doit être une erreur stupide...
public ActionResult StatisticsFeed()
{
StatisticsViewModel cs = new StatisticsViewModel();
cs.TotalData = (new StatisticsRepository()).GetStatisticCompleteData(1);
cs.TotalCitizns = 569;
return View(cs);
}
OriginalL'auteur 1110 | 2011-09-03
Vous devez vous connecter pour publier un commentaire.
Vous devez spécifier explicitement le modèle transmis à l'partielle à l'aide de la deuxième argument de la
RenderPartial
méthode. Si vous ne spécifiez pas le modèle parent est passé et donc l'exception, vous bénéficiez de:Une autre possibilité est d'utiliser RenderAction:
Cela va appeler la
StatisticsFeed
contrôleur de l'action qui lui-même va chercher le modèle de la base de données et de rendre les résultats.yeap. Eh bien, vous avez de passer une instance de
StatisticsViewModel
à votre partiel, c'est qu'il attend. Où vous stockez c'est un autre problème. Il pourrait en effet être une propriété sur votre écran principal modèle. Vous pouvez également passer une nouvelle instance:new StatisticsViewModel()
.Si je passe le nouvel objet alors que l'objet est vide. Dans mon deuxième code dans ma question je remplir d'objets qui ont données de cette vue partielle. Mon problème est résolu quand j'ai des statistiques de l'objet dans 'bigPage modèle. Donc, il n'y a aucun moyen que je peux injecter de contrôleur directement dans ma vue partielle? Parce que j'ai peur que ma "bigPageViewModel' sera trop grand.
vous pouvez utiliser RenderAction au lieu de RenderPartial, comme ceci:
@{Html.RenderAction("StatisticsFeed", "ControllerName");}
. Cela va passer par le contrôleur de l'action et de rendre la partielle. J'ai mis à jour ma réponse à inclure un exemple.Merci je ne savais pas pour RenderAction et je suis proche de résultat, parce que j'ai reçu valeurs :). Mais maintenant, je reçois deux résultats obtenus avec les données et l'autre sans, j'ai mis à jour la question pouvez vous s'il vous plaît vérifier que doit être une petite erreur dans mon code?
OriginalL'auteur Darin Dimitrov