2009-03-25 23 views

risposta

22

Come aggiungere una pagina di codice sottostante ad una vista parziale

sembra che questo non era particolarmente difficile, ed è abbastanza fattibile. Questa risposta ha lavorato per un parziale ViewUserControl ma lo stesso dovrebbe valere per un MVC normale ViewPage così

  1. Aggiungere un nuovo file di classe con la convenzione di <view filename & extention>.cs (cioè view.ascx.cs)

  2. Aggiungere using System.Web.Mvc; alla classe

  3. Modificare la classe in Eredita da ViewUserControl<>.
    cioè public class Foo:ViewUserControl

  4. Aggiungere il seguente alla intestazione della Vista:

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

  5. Copiare i file dalla soluzione e trascinare nuovamente a ri-associare le due cose insieme. Questo potrebbe non essere necessario in VS 2010+ e MVC 2+.

per questo al lavoro con un normale MVC View, è sufficiente ereditare la classe da "ViewPage"

+4

Grazie per quello. Ho trovato un modo più rapido per associare i due file insieme: fare clic con il pulsante destro del mouse, scegliere Escludi dal progetto, quindi con "Mostra tutti i file" selezionato fare clic di nuovo con il tasto destro e ricollegarli. – Andrew

+3

VS2010 li associa non appena si crea la classe blah.ascx.cs (nella stessa directory della pagina aspx). Eccezionale. – ashes999

4

Io non so perché si sta creando un codice al file, ma se davvero davvero, quindi prenderei in considerazione l'utilizzo dell'approccio webform standard.

Vorrei anche esaminare le nozioni di base di MVC per capire perché i page behind non sono necessari.

Another explanation

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

+1

È davvero semplice. Devo usare il codice dietro per popolare la serie Chart che sto usando. Non mi permetterebbe di usare un normale approccio MVC. Questo è un vero compromesso mondiale, e funziona. –

+0

In questo caso, ecco come utilizzare Chart senza code-behind: http://code-inside.de/blog-in/2008/11/27/howto-use-the-new-aspnet- chart-controls-with-aspnet-mvc/ –

+0

Quindi mi stai dicendo che preferiresti essere molto caotico nel gestire il codice spaghetti nel tuo html? Penso che questo sia un uso molto valido del codice. Non è una logica del controller, non è un codice di presentazione. è la preparazione della presentazione. –

2

Ok, ho verificato la soluzione, qui è qualcosa che è necessario notare:

Codebehind = "View.ascx.cs" Eredita = "Project.Views .Shared.View "

Nel tuo caso, devi modificare" Project.Views.Shared.View "in base al tuo spazio dei nomi e nome della classe, e per poter accedere al controllo nel code-behind, devi manualmente aggiungere la dichiarazione in co de-behind. Nel mio caso, ho bisogno di inizializzare il controllo 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

Per aggiungere un file codebehind alla pagina aspx, mentre ancora permettendo così di essere il bersaglio di una vista MVC, procedere come segue.

Per una pagina vista con nome ... Index.aspx

sostituire il seguente codice ....

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

con

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

quindi creare un file chiamato Index.aspx.cs (o .vb).

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

o VB

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

Questo è tutto. L'unica cosa speciale è usare la classe di base Mvc.ViewPage corretta.

Problemi correlati