2009-07-07 15 views
2

Ich suche den Code-Behind für eine Kontrolle in meiner WebForms 3.5-Anwendung loszuwerden. Wieder durch den Fehler von gebissen, wie es in MVC getan hat, würde Ich mag einen Schritt näher an dieser Methode erhalten, indem Sie:Stark typisierte ASCX in WebForms 3.5?

<%@ Control Language="C#" Inherits="Core.DataTemplate<Models.NewsArticle>" %> 

Das mir die Parserfehler gibt man erwarten würde, so erinnerte ich mich wieder an Wenn dies ein Problem war, das auf eine Fehlerbehebung in der MVC-Vorschau wartet, und in:

<%@ Control Language="C#" Inherits="Core.DataTemplate`1[[Models.NewsArticle]]" %> 

geändert wurde, funktioniert das aber auch nicht! Wie konnte das MVC-Team diese Fähigkeit nutzen? War es etwas Besonderes am MVC-Projekttyp und nicht am neuesten VS2008 Service Pack?

Da ich nicht aufgeben muss und zukünftige Vorlagen mit Code-Behind-Dateien benötigen, was sind meine besten Optionen, um dies so nah wie möglich an die generische Benutzersteuerungsmethode zu bringen?

+0

Klingt, als ob Sie versuchen, Webformulare zu biegen. Persönlich wenn ich Webformulare mache, mache ich Dinge, die das Web so formt - also mit Code hinter Dateien. Wenn ich ASP.NET MVC mache, mache ich Dinge auf MVC-Art. Der Versuch, sich in den anderen zu verbiegen, verlangt nach Schwierigkeiten. – RichardOD

+0

In gewisser Weise versuche ich, WebForms zu biegen, aber wenn es möglich ist, unnötige Dateien loszuwerden, denke ich nicht, dass das zu viel verlangt ist. Besonders wenn es bereits eine Syntax gibt, die ich in einem extrem ähnlichen Kontext gesehen habe und die perfekt passt, ist es frustrierend, sie nicht verfügbar zu haben. – tags2k

Antwort

4

Nun, es scheint, als ob ich es geschafft habe. Nach dem Betrachten des PageParserFilter, der vom MVC-Team für ViewUserControl<T> implementiert wurde, konnte ich etwas ähnliches für meine eigenen DataTemplate<T> Zwecke konstruieren. Süss. Ich kann jetzt die Zeile verwenden:

<%@ Control Language="C#" Inherits="Core.DataTemplate<Models.NewsArticle>" %> 

Und ohne Code hinter der Datei analysiert es! Ich melde mich, wenn ich feststelle, dass ich dabei etwas anderes kaputt gemacht habe!

0

Mit WebForms verlieren Sie so ziemlich alles, was sie ohne Code hinter der Seite nützlich macht, denn dann kann VS die Designer-Datei, die die tatsächlichen Definitionen für alle Ihre runat="server"-Steuerelemente enthält, nicht automatisch generieren.

Was können Sie tun, ist eine gemeinsame Basisseitenklasse haben, und machen, dass generic:

public class DataTemplate<T> : Page { 
    public T Model {get;set;} 
} 

public partial class MyCodeBehindClass : 
    DataTemplate<Models.NewsArticle> { 
    ... 
} 

Das ganze Drag & Drop-Komponente Sachen erlauben würde, dass WebForms tut ungehindert zu arbeiten, während auch Sie zu ermöglichen Zugriff auf ein stark typisiertes Modell auf der Seite:

<%@ Control Language="C#" Inherits="MyCodeBehindClass" %> 

<% foreach(var item in Model) { %> 
    <!-- do stuff --> 
<% } %> 
+0

Ah, meine Frage war wahrscheinlich nicht klar, aber ich habe bereits eine DataTemplate : UserControl-Klasse, die ich versuche, in der benutzerdefinierten ASCX zu verwenden, und vermeiden Sie die partielle Klasse. – tags2k

+0

Ahh, aber wieso sollten Sie dann irgendwas von WebForms behalten? Warum nicht MVC verwenden, da Sie keine WebForms-Komponenten verwenden können, ohne dass VS eine partielle Klasse generiert? – Keith

+0

Dies ist eine bestehende WebForms-Anwendung, die ich versuche, so viel wie möglich aufzuräumen, damit ich die gesamte Architektur nicht ändern kann. Die meisten der Front-End-Generation ist abstrahiert, so dass das einzige, was ich kümmern müssen, ist MasterPages und diese Vorlagen wo erforderlich, die keine der WebForms-Bits benötigen. – tags2k

Verwandte Themen