2009-08-24 19 views
0

Ich bin mit Asp.net MVC 1 und ich würde wirklich wie meine Controller-Aktionen StronglyTyped anzeigen (Daten) Anrufe verwenden, die Art erzwingen Überprüfung an Kompilierzeit und lassen Sie mich immer noch ASPX-Seiten unter der Standard-View-Engine verwenden. Die ViewPages Ich nenne sind stark typisiert, aber Fehler in der Aufruf der Aktion zu sehen (Daten) kann nicht bei der Kompilierung gefangen werden, da die in Controller-Ansicht (Daten) Methode erstellt wird nicht stark typisiert und überprüfen Sie nicht einmal zu sehen wenn die Seite zum Zeitpunkt der Kompilierung existiert.ASP.NET StrongTyped-Controller-Action View <TView, TModel> (TModel Data)

Ich habe eine Teillösung (Code unten) mit this post implementiert, aber (1) Ich kann die generische View-Funktion nicht den Typ der starken Ansichtsseiten erkennen, es sei denn, ich hinterlasse einen Code für die stark typisierte Ansicht, und (2) Intellisense und Refactoring funktionieren mit dieser Methode nicht richtig, was mich an der Zuverlässigkeit der von mir verwendeten Methode zweifeln lässt.

Frage: Gibt es eine bessere Art und Weise Art Durchsetzung zu erhalten, wenn Ansichten von Aktionen aufrufen?

Alternative: Gibt es eine alternative Methode, bei der meine Aktionsmethode eine Instanz einer Ansichtsseite erstellen kann, einige Eigenschaften direkt festlegen und dann den HTML-Code an die Aktionsantwort rendern kann?

Code: Hier ist die Basisklasse alle von meinem Controller Vererben zu erreichen, was ich bisher:

public class StrongController : Controller 
    { 

     protected ActionResult View<TView, TModel>(TModel model) 
      where TView : ViewPage<TModel> 
      where TModel : class 
     { 
      return View(typeof(TView).Name, model); 
     } 


    } 

Und hier ist ein Beispiel-Controller im Einsatz: Namespace ExampleMVCApp.Controllers {

public class HomeController : StrongController 
    { 

     public ActionResult Index() 
     { 
      return View<ExampleMVCApp.Views.Home.Index, ExampleData>(new ExampleData()); 
     } 


    } 
} 

Viewpage-Code Hinter Requ ired für Typ Recognition ... Aspx-Header hat nicht funktioniert

namespace ExampleMVCApp.Views.Home 
{ 
    public class Issue : System.Web.Mvc.ViewPage<ExampleData> 
    { 
    } 

} 
+0

Ich kann nicht sehen, warum Sie dies tun wollen. Du scheinst ein Problem zu lösen, das nicht existiert. – RichardOD

+0

Die Ansicht erfordert Daten eines bestimmten Typs, und ich würde erwarten, dass das Framework dies erzwingen kann. – Glenn

+0

Vielleicht mache ich mir ein bisschen zu viel Sorgen. Aber ich habe oft andere Leute, die an den ViewPages arbeiten, und das würde die Interaktion mit ihren Views erleichtern. – Glenn

Antwort

0

Ich denke, Sie sollten die T4MVC helpers einen Spin (einer der ursprünglichen Ankündigungen here) geben. Dies würde zumindest können Sie loswerden der Code, den Sie bereits haben, erhalten, da diese Vorlagen den Code auf der Basis der Ansichten erzeugen Sie bereits haben und Sie verwenden diese „falsche“ Methode ruft Ihre Ansichten zu adressieren.

Damit Ihre Anrufe zu View stark für das spezifische Modell eingegeben werden, das von Ihrer Ansicht deklariert wird, bin ich nicht genau sicher, ob diese Helfer Ihnen dabei helfen (obwohl ich vermute, dass sie das tun). wenn sie es tun jedoch nicht, können Sie immer noch den T4MVC Code Hack selbst zu tun so oder mit dem ursprünglichen Autor in Verbindung zu setzen, David Ebbo, um die Funktion für die Zugabe vor.

+0

Danke für den Vorschlag. Ich werde das überprüfen und berichten, ob sie für meine Situation gearbeitet haben. – Glenn

+0

Ich verbrachte ein paar Stunden mit T4 und den MVC-Futures-HTML-Helfern. T4 ist nett und hat im Allgemeinen gut funktioniert. Allerdings macht das Auto gen Code es mir, ein mehrfach barfed wie ich Refactoring meines Code mit seltsamer Kompilierung Fehlern und aus dem Blogs auf seiner Konstruktion das gesamte Werkzeug scheint schwierig zu halten.Ich werde weiterhin eine Kombination aus meiner obigen Methode und möglicherweise einigen Lambda-Funktionen verwenden, bis der MVC-Kern eine bessere integrierte Methode bietet. Fazit: Ich denke, Ihre T4 Vorschlag ist eine sehr gute Option, ich werde nur auf der Seite der Dinge einfach und stabil zu bleiben irren. Danke. – Glenn

+0

Danke für die Rückmeldung. Da ich die T4MVC-Helfer nicht selbst benutzt habe, hat man mich neugierig gemacht, ob seine View-Helfer stark typisiert sind oder nicht, out of the box. Könnten Sie etwas dazu sagen? – paracycle