2008-09-15 12 views
1

Ich hatte eine Arbeitslösung mit ASP.NET MVC Preview 3 (wurde aus einer Vorschau 2-Lösung aufgerüstet), die eine nicht typisierte Viewmaster wie so verwendet:ASP.NET MVC Viewdata (unter Verwendung von Indizes)

public partial class Home : ViewMasterPage 

Auf Startseite .Master eine Anzeige Anweisung wie folgt lautet:

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

jedoch 4.

im Anschluss daran ein Entwickler im Team nur die Montage Verweise auf Vorschau geändert, wird der Code nicht mehr bevölkern ViewData mit indizierten Werten wie oben.

ViewData ["Generic"] ist stattdessen null.

Gemäß this question funktioniert ViewData.Eval ("Generic"), und ViewData.Model wird ebenfalls korrekt ausgefüllt.

Der Grund, warum diese Lösung keine typisierten Seiten usw. verwendet, ist, dass es sich um eine Legacy-Lösung handelt. Als solches ist es unpraktisch, diese ziemlich große Lösung zu durchlaufen und alle ASPX-Seiten zu aktualisieren (besonders, da der Compiler solche Sachen nicht erkennt).

Ich habe versucht, die Assemblies zurückzusetzen, indem Sie die Referenz entfernen und dann einen Verweis auf die Vorschau 3-Assembly im Ordner "bin" des Projekts hinzufügen. Das hat nichts geändert. Ich habe sogar versucht, die Projektdatei auf eine frühere Version zurückzusetzen, und das schien das Problem immer noch nicht zu beheben.

Ich habe andere Lösungen mit der gleichen Technik, die weiterhin funktionieren.

Gibt es irgendetwas, was Sie vorschlagen können, warum dies plötzlich aufgehört hat zu funktionieren und wie ich es beheben könnte (ein Hinweis in die richtige Richtung wäre willkommen)?

Antwort

1

Wir haben diese Änderung gemacht, weil wir ein bisschen Symmetrie mit dem [] Indexer wollten. Die Eval() -Methode verwendet Reflektion und untersucht das Modell, um Werte abzurufen. Der Indexer betrachtet nur Objekte, die direkt zum Wörterbuch hinzugefügt wurden.

+0

Okay, danke für das Läuten. –

0

Ich habe beschlossen, alle Instanzen von ViewData ["blah"] durch ViewData.Eval ("blah") zu ersetzen. Allerdings würde Ich mag die Ursache für diese Veränderung wissen, wenn möglich, weil:

  1. Wenn es auf meinen anderen Projekten passiert, wäre es schön, beheben zu können.
  2. Es wäre nett, den implementierten Arbeitscode zu belassen und diese Änderungen nicht zu überschreiben.
  3. Es wäre schön zu wissen, dass sich nichts geändert hat, was ich nicht bemerkt habe.
0

Wie stellen Sie die Viewdaten ein? Dies funktioniert für mich:

Controller:

ViewData["CategoryName"] = a.Name; 

Ausblick:

<%= ViewData["CategoryName"] %> 

BTW, ich bin auf Vorschau 5 jetzt. Aber das hat funktioniert auf 3 und 4 ...

0

Re: Ricky

ich gerade vorbei, ein Objekt, wenn ich die Ansicht() -Methode von der Steuerung aufrufen.

Ich habe auch festgestellt, dass auf meinem bereitgestellten Server, wo nichts aktualisiert wurde, ViewData.Eval fehlschlägt und ViewData ["Index"] funktioniert.

Auf meinem Entwicklungsserver Viewdata [ „Index“] versagt und ViewData.Eval funktioniert ...

0

Ja, so was auch immer Sie die Ansicht gelangen in ist in der Darstellung als ViewData.Model zugänglich. Aber das wird nur ein gutes altes Objekt sein, wenn Sie nicht die stark typisierten Ansichten machen ...

+0

Ja, das verstehe ich. Das Problem war, dass ViewData ["blah"] nicht mehr eingestellt wurde und ich wollte wissen warum (MVC Preview 4 hat das geändert, aber das wollte ich bestätigen). Ich vermute ich fragte mich auch, warum ich die Referenzänderungen des Entwicklers nicht ungeschehen machen konnte. –

Verwandte Themen