?
Solved

MVC3 assign variable on every page from single peice of code

Posted on 2011-05-04
4
Medium Priority
?
722 Views
Last Modified: 2013-11-08
Hi experts.

I'm new to MVC3 coming from an asp.net background.

I have a multi page size using razor views and a master layout page.

On the master page is a div that contains a banner image and what i wish to do is change that image depending on what page i go to.

So, what trying to find out is how to run code from the master page to populate a variable on the master page? In asp.net i would normally put query in the master page's .cs file and either push the variable to the front page or pull the variable from the code.

I realise that i could create a  public void and call this from the each pages action result, but I'm sure there must be a way to put the code in once and have it called automatically by each page.

Regards
Steve
0
Comment
Question by:fusioninternet
4 Comments
 
LVL 9

Expert Comment

by:radcaesar
ID: 35691137
0
 
LVL 27

Accepted Solution

by:
Sammy earned 2000 total points
ID: 35711208
Create a base controller and have your controllers inherit from this basecontroller.
in the constructor of the controller initialize a TempData varable with the path of the your image
TempData["MyMasterImage"]="path to the image"
reference the TempData["MyMasterImage"] in the master view

0
 
LVL 5

Expert Comment

by:Vipul Patel
ID: 35787969
Option:1
<img src="@ViewData["masterImage"]" title="src="@ViewData["masterImage"]"" />
Manipulate ViewData in the basecontroller suggested by sammy1971

Option:2
Create HTML helper class

public static MvcHtmlString MasterImage(this HtmlHelper html)
{
   /*
   Action and Controller name can be found in the html object.
   Based on different action return image path and use it below.
   Switch(action)
  {
        case "action1": imagepath = "\image1.jpg"; break
        case "action2": imagepath = "\image2.gif"; break
   
   }
   */
   
    var imgBuilder = new TagBuilder("img");
    imgBuilder.MergeAttribute("src", url.Content(imagePath));
    imgBuilder.MergeAttribute("alt", alt);
    string imgHtml = imgBuilder.ToString(TagRenderMode.SelfClosing);

    return MvcHtmlString.Create(imgHtml );
}

use in master page
@Html.MasterImage()


0
 
LVL 1

Author Closing Comment

by:fusioninternet
ID: 35878976
Yes basecontroller was the way to go and got it to work as i wnated once I managed to find out where to create a base controller and how to reference it
0

Featured Post

Upgrade your Question Security!

Add Premium security features to your question to ensure its privacy or anonymity. Learn more about your ability to control Question Security today.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

IntroductionWhile developing web applications, a single page might contain many regions and each region might contain many number of controls with the capability to perform  postback. Many times you might need to perform some action on an ASP.NET po…
In this article you'll learn how to use Ajax calls within your CodeIgniter application. To explain this, I'll illustrate how to implement a simple contact form to allow visitors to send you an email through your web site.
The purpose of this video is to demonstrate how to set up the WordPress backend so that each page automatically generates a Mailchimp signup form in the sidebar. This will be demonstrated using a Windows 8 PC. Tools Used are Photoshop, Awesome…
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…
Suggested Courses

807 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question