2008-09-15 9 views
1

j'ai eu une solution de travail en utilisant ASP.NET MVC Preview 3 (a été mis à jour à partir d'une solution Preview 2) qui utilise un ViewMasterPage typées comme ceci:ASP.NET MVC ViewData (en utilisant les indices)

public partial class Home : ViewMasterPage 

On Home .master il y a une déclaration d'affichage comme ceci:

<%= ((GenericViewData)ViewData["Generic"]).Skin %> 

Cependant, un développeur de l'équipe vient de changer les références d'assemblage à 4. Aperçu

par la suite, le code ne sera plus remplir ViewData avec des valeurs indexées comme ci-dessus. Au lieu de cela, ViewData ["Generic"] est null.

Conformément à this question, ViewData.Eval ("Générique") fonctionne, et ViewData.Model est également rempli correctement.

Cependant, la raison pour laquelle cette solution n'utilise pas de pages typées, etc. est que c'est une sorte de solution héritée. En tant que tel, il est peu pratique de passer en revue cette solution assez volumineuse et de mettre à jour toutes les pages .aspx (d'autant plus que le compilateur ne détecte pas ce genre de choses).

J'ai essayé d'annuler les assemblages en supprimant la référence, puis en ajoutant une référence à l'assemblage Preview 3 dans le dossier 'bin' du projet. Cela n'a rien changé. J'ai même essayé de rétablir le fichier Project à une version antérieure et cela ne semblait toujours pas résoudre le problème.

J'ai d'autres solutions utilisant la même technique qui continuent à fonctionner.

Y a-t-il quelque chose que vous pouvez suggérer pour expliquer pourquoi cela a soudainement cessé de fonctionner et comment je pourrais y remédier (n'importe quel indice dans la bonne direction serait apprécié)?

Répondre

1

Nous avons fait ce changement parce que nous voulions un peu de symétrie avec l'indexeur []. La méthode Eval() utilise la réflexion et examine le modèle pour extraire les valeurs. L'indexeur ne regarde que les éléments directement ajoutés au dictionnaire.

+0

D'accord, merci pour clairfying. –

0

J'ai décidé de remplacer toutes les instances de ViewData ["blah"] par ViewData.Eval ("blah"). Cependant, je voudrais savoir la cause de ce changement, si possible, parce que:

  1. Si cela se produit sur mes autres projets, il serait agréable d'être en mesure de résoudre.
  2. Ce serait bien de laisser le code de travail déployé et de ne pas l'écraser avec ces changements.
  3. Il serait bon de savoir que rien d'autre n'a changé que je n'ai pas remarqué.
0

Comment définissez-vous les données d'affichage? Cela fonctionne pour moi:

Controller:

ViewData["CategoryName"] = a.Name; 

Vue:

<%= ViewData["CategoryName"] %> 

BTW, je suis sur 5 Preview maintenant. Mais cela a travaillé sur 3 et 4 ...

0

Re: Ricky

Je suis en train de faire passer un objet lorsque j'appelle la méthode View() du contrôleur.

J'ai également remarqué que sur mon serveur déployé où rien n'a été mis à jour, ViewData.Eval échoue et ViewData ["index"] fonctionne.

Sur mon serveur de développement ViewData [ « index »] échoue et fonctionne ViewData.Eval ...

0

Ouais, donc tout ce que vous passez dans la vue est accessible dans la vue comme ViewData.Model. Mais ce sera juste un bon vieux objet si vous ne faites pas les vues fortement typées ...

+0

Oui, j'ai compris. Le problème était que ViewData ["blah"] a cessé de se régler et je voulais savoir pourquoi (en supposant que MVC Preview 4 ait changé cela mais voulait confirmer). Je suppose que je me demandais aussi pourquoi je ne pouvais pas sembler annuler les changements de référence du développeur –

Questions connexes