ASP.NET MVC '@modèle dynamique " de ne pas reconnaître les propriétés du Modèle lors de la partielle de la vue est en dossier Partagé
Pas un doublon de: MVC, Razor modèle dynamique, l '"objet" ne contient pas une définition pour 'PropertyName'
Selon les réponses,
Selon David Ebbon, vous ne pouvez pas passer d'un type anonyme dans un
dynamiquement typé, car les types anonymes sont compilés à l'
interne. Depuis le CSHTML vue est compilé dans un ensemble distinct
il ne peut pas accéder à l'anonyme du type de propriétés.
Pourquoi le code ci-dessous - qui aurait devraient jamais travailler - travailler comme je l'avais prévu lorsque la vue partielle se trouve dans "/Home/_Partial.cshtml", mais s'arrête soudainement de fonctionner lorsqu'il est déplacé vers "/Shared/_Partial.cshtml"?
À l'aide de ASP.NET 4.5 (et versions antérieures), le produit le texte "Hello, World!" le navigateur web:
~/Controllers/Contrôleur HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace TestDynamicModel.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
}
~/Views/Home/Index.cshtml
@Html.Partial("_Partial", new { Text = "Hello, world!", ShouldRender = true } )
~/Views/Home/_Partial.cshtml
@model dynamic
@if (!Model.ShouldRender)
{
<p>Nothing to see here!</p>
}
else
{
<p>@Model.Text</p>
}
Toutefois, lorsque le _Partial.cshtml est plutôt déplacé vers ~/Views/Shared/_Partial.cshtml, l'erreur suivante est renvoyée dans _Partial.cshtml (ligne 2):
'object' does not contain a definition for 'ShouldRender'
À l'inspection du Modèle dans le débogueur, je trouve les propriétés suivantes:
Model { Text = Hello, world!, ShouldRender = True }
OriginalL'auteur Alexander Pritchard | 2013-09-24
Vous devez vous connecter pour publier un commentaire.
Alors que la question est concernant le comportement de ASP.NET MVC, et je suis conscient du fait que des solutions de contournement, je ne suis pas sûr que tout le monde est. Voici une solution de contournement pour quelqu'un qui veut simplement leur code du travail: Dynamique Anonyme de type de Rasoir causes RuntimeBinderException
OriginalL'auteur Alexander Pritchard
J'ai trouvé ce DONC réponse: https://stackoverflow.com/a/21633464/605067 être la solution à mon erreur, qui avait les mêmes symptômes que les vôtres. Le message d'erreur était:
et qui a entraîné le passage d'un objet anonyme à {{@Html.Partielle}} de la même manière que vous avez fait.
Comme indiqué dans cette réponse, il est parfaitement valable pour la transmission des objets anonymes dans les vues partielles, et ces points de vue ne pas nécessité d'inclure {{@modèle dynamique}} - en fait, vous êtes la création d'une certaine surcharge inutile si vous utilisez un modèle dynamique.
Le vrai problème, c'est que ce message d'erreur est trompeur, au moins dans mon cas. Le problème était que j'avais d'autres afficher les fichiers dans le même répertoire qui n'a pas correctement compiler, et il semble jeter le point de vue du compilateur off. Le correctif fourni dans l'autre post travaillé, qui était de mettre le *.csproj propery
à true, puis fixer toutes les erreurs de compilation dans mes vues. Après la fixation, j'ai été capable de se lier à l'objet anonyme dans ma vision partielle.
OriginalL'auteur crimbo
À utiliser
dynamic
type dont vous avez besoin pour faire référence àMicrosoft.CSharp
de l'assemblée. Vérifiez les références de votre projet.OriginalL'auteur the_joric