2009-03-25 8 views

Répondre

22

Comment ajouter une page code-behind à une vue partielle

Semble cela n'a pas été particulièrement délicate, et est tout à fait faisable. Cette réponse a travaillé pour une partielle ViewUserControl mais le même doit faire une demande normale MVC ViewPage et

  1. Ajouter un nouveau fichier de classe avec la convention de <view filename & extention>.cs (c.-à-view.ascx.cs)

  2. Ajouter using System.Web.Mvc; à la classe

  3. Modifiez la classe à Hériter de ViewUserControl<>.
    dire public class Foo:ViewUserControl

  4. Ajouter ce qui suit à l'en-tête de la vue:

    CodeBehind="View.ascx.cs" Inherits="Project.Views.Shared.View"

  5. Copiez les fichiers de la solution et faites-le glisser en arrière pour réassocier les deux ensemble. Cela peut ne pas être nécessaire dans VS 2010+ et MVC 2+.

Pour que cela fonctionne avec une vue normale MVC, vous avez juste besoin d'hériter de la classe de « ViewPage »

+4

Merci pour cela. J'ai trouvé une façon plus rapide d'associer les deux fichiers ensemble, c'est de cliquer dessus avec le bouton droit de la souris, de choisir Exclure du projet, puis de cliquer sur "Afficher tous les fichiers" et de les ré-inclure. – Andrew

+3

VS2010 les associe dès que vous créez la classe blah.ascx.cs (dans le même répertoire que la page aspx). Impressionnant. – ashes999

4

Je ne sais pas pourquoi vous créez un fichier code-behind, mais si vous avez vraiment vraiment faire, alors je envisagerais d'utiliser l'approche standard webforms à la place.

Je voudrais également examiner les bases de MVC pour comprendre pourquoi les pages derrière ne sont pas nécessaires.

Another explanation

How to use ASP:Chart without a code-behind (Option B)

+1

C'est vraiment très simple. J'ai besoin d'utiliser le code derrière pour remplir la série graphique que j'utilise. Cela ne me laisserait pas utiliser une approche MVC normale. C'est un vrai compromis mondial, et cela fonctionne. –

+0

Dans ce cas, voici comment vous pouvez utiliser le graphique sans code-behind: http://code-inside.de/blog-in/2008/11/27/howto-use-the-new-aspnet- chart-controls-with-aspnet-mvc/ –

+0

Donc, vous me dites que vous préférez avoir très difficile à gérer le code spaghetti dans votre code HTML? Je pense que c'est une utilisation très valable du code derrière. Ce n'est pas une logique de contrôleur, ce n'est pas du code de présentation. c'est la préparation de la présentation. –

2

Ok, je l'ai vérifié la solution, voici quelque chose que vous devez noter:

CodeBehind = "View.ascx.cs" Inherits = "Project.Views .Shared.View "

Dans votre cas, vous devez modifier" Project.Views.Shared.View "en fonction de votre espace de nom et nom de classe, et pour accéder au contrôle dans le code-behind, vous devez manuellement ajouter une déclaration en co dé-derrière. Dans mon cas, je dois initialiser le contrôle Gigasoft proEssential:

public class gigaTest2 : ViewUserControl 
{ 
    protected global::Gigasoft.ProEssentials.PegoWeb PegoWeb1; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // Set Titles 
     PegoWeb1.PeString.MainTitle = "Hello ASP.NET"; 
     PegoWeb1.PeString.SubTitle = ""; 

     // One simple way of passing data, data binding also possible. //' 
     PegoWeb1.PeData.Subsets = 1; 
     PegoWeb1.PeData.Points = 6; 
     PegoWeb1.PeData.Y[0, 0] = 10; 
     PegoWeb1.PeData.Y[0, 1] = 30; 
     PegoWeb1.PeData.Y[0, 2] = 20; 
     PegoWeb1.PeData.Y[0, 3] = 40; 
     PegoWeb1.PeData.Y[0, 4] = 30; 
     PegoWeb1.PeData.Y[0, 5] = 50; 

     // Set style of chart and a few other properties //' 
     PegoWeb1.PePlot.Method = Gigasoft.ProEssentials.Enums.GraphPlottingMethod.Bar; 
     PegoWeb1.PePlot.Option.GradientBars = 8; 
     PegoWeb1.PeFont.FontSize = Gigasoft.ProEssentials.Enums.FontSize.Large; 
    } 
1

Pour ajouter un fichier codebehind à votre page ASPX, tout en lui permettant d'être la cible d'une vue MVC, procédez comme suit.

Pour une page vue nommée Index.aspx ...

Remplacer le code suivant ....

<%@ Page Inherits="System.Web.Mvc.ViewPage" %> 

avec

<%@ Page CodeFile="Index.aspx.vb" Inherits="Home_Index" %> 

Ensuite, créez un fichier appelé Index.aspx.cs (ou .vb).

partial class Home_Index : System.Web.Mvc.ViewPage 
{...} 

ou VB

Partial Class Home_Index 
    Inherits System.Web.Mvc.ViewPage 
    ... 
End Class 

Voilà. La seule chose spéciale est d'utiliser la bonne classe de base Mvc.ViewPage.

Questions connexes