how to add a code-behind page to a view or partial view
Asked Answered
C

4

17

I notice with the latest version of ASP.NET MVC that a View no longer defaults to having code-behind classes.

How do I go about adding a code-behind class now to a View or Partial View??

Cellulous answered 25/3, 2009 at 6:37 Comment(1)
How about changing the title to read How to add a code-behind page to any viewHenequen
C
23

How to add a Code-behind page to a Partial View

Seems this wasn't particularly tricky, and is quite do-able. This answer worked for a Partial ViewUserControl but the same should apply for a Normal MVC ViewPage as well

  1. Add a new Class file with the convention of <view filename & extention>.cs (i.e. view.ascx.cs)

  2. Add using System.Web.Mvc; to the class

  3. Change the class to Inherit from ViewUserControl<>.
    i.e. public class Foo:ViewUserControl

  4. Add the following to the View's header:

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

  5. Copy the files out of the solution and drag back in to re-associate the two together. This may not be necessary in VS 2010+ and MVC 2+.

For this to work with a normal MVC View, you just need to inherit the class from "ViewPage"

Cellulous answered 25/3, 2009 at 7:5 Comment(2)
Thanks for that. I've found a quicker way to associate the two files together is to right-click them, choose Exclude From Project, then with 'Show All Files' selected right-click them again and re-include them.Brentwood
VS2010 associates them as soon as you create the class blah.ascx.cs (in the same directory as the aspx page). Awesome.Swellfish
D
4

I'm not sure why you are creating a code behind file, but if you really really do, then I would consider using the standard webforms approach instead.

I would also look into the basics of MVC to understand why page behinds are not needed.

Another explanation

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

Debark answered 25/3, 2009 at 9:38 Comment(4)
It's quite simple really. I need to use code behind to populate the Chart series i'm using. It wouldn't let me use a normal MVC approach. This is a REAL world compromise, and it works.Cellulous
In that case, here is how you can use Chart without a code-behind: code-inside.de/blog-in/2008/11/27/…Debark
So are you telling me you would prefer to have very messy hard to manage spaghetti code in your html? I think this is very valid use of code behind. It is not controller logic, it isn't presentation code. it is presentation preparation.Cellulous
You don't have to put all of that code in the view. It's merely put there to show the user that they don't need to use code-behinds to achieve the same thing.Debark
T
2

Ok, I have verified the solution, here is something that you need to note:

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

In your case, you need to change "Project.Views.Shared.View" based on your namespace and classname, and in order to access the control in the code-behind, you have to manually add declaration in code-behind. In my case, I need to initialize the gigaSoft proEssential control:

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;
    }
Tonguing answered 8/5, 2009 at 15:12 Comment(0)
V
1

To add a codebehind file to your aspx page, while still allowing it to be the target of an MVC view, do the following.

For a view page named Index.aspx...

Replace the following code....

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

with

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

Then create a file called Index.aspx.cs (or .vb).

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

or VB

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

That's it. The only thing special is using the correct Mvc.ViewPage base class.

Valenza answered 27/10, 2016 at 22:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.