.net - MVC 3 Layout ViewBag Data Across All Child Views?
Mar 5, 2011
We need dynamic data passed to our layout file, no matter what the child view is. For example, we display some user specific data in the header of the layout.
How can we pass this data to the layout view without each action having to supply it independently? Should we use a custom controller, or is there a better solution?
I have a web application that uses the master/child page layout you get by default (at least in a VS2010 web project). The Masterpage has a NavigationMenu, each item on that NavigationMenu has a NavigateUrl that looks like "~/Pages/MyPage.aspx". This automatically opens 'MyPage' in the Content of the Masterpage, so that the master page with menu and header etc stays visible.
Now, the client has a guestbook on her old website (I'm basically rebuilding her website, adding the ability for her to upload new content in her browser), and she wants to keep it. This guestbook is from a 'free guestbook' third party website, over which I have no control. It's simply a website in the form [URL] .... which shows the guestbook for a user 'Username'.
In her old website, I was using frames, so the menu on the left side was in a different frame, and I would simply open the third party website in the center frame. That would create the illusion that the guestbook was on her site, while it was actually a completely different website in a separate frame.
In my new website I'm no longer using frames, but the master/child layout as explained. Is it still possible to 'host' or 'embed' this third party website as a 'child' of the master page?
I tried just putting the url to the guestbook in the NavigateUrl of a NavigationMenu item, but that doesn't work, it just navigates to the third party website and doesn't embed it in any way.
I have a layout page (or master page) with MVC 3 and would like to make my views sort of content pages to this layout page, but alas I have no clue how to do this.
Im currently using a method that looks like the following code to add script and css files to the head of the Layout file.
[Code]....
My problem is that this is a static method meaning it persists the list of stylesheets and script files.
I need to do the same thing that this does but without keeping it persistant.
I need the lists to be remade on every request since they change from page to page what the look are on that specific page.
Is it possible to clear the lists on every request prior to adding the scripts that are needed or maybe after they have been rendered out?
Update:
The reason for not using a section, RenderPartial or RenderaActions is to prevent the same stylesheet or script file to be added more than once to the Layout file.
The site im building has a Layout_.cshtml with the basic layout. This in turn is used by a View that loops through a list of items and for each item a RenderAction is called that outputs the specific partial view for that item. These partial views sometimes need to add stylesheets and scripts.
As there can be needed to add many different scripts and stylesheets from different partial views a global list for styles and scripts were the only way i thought this could be done so there is a global place to check if a script is allready added to the collection or not and then render them all at once in the order they were added.
Update 2:
The real question is how to do the same kind of function (a global list) but without using a static Extension method.
I am having an issue with MVC-3 generating outgoing routes for me. This is the address of the page I am on for both scenarios: [URL] Here are the map routes:
[Code]....
Scenario 1: From the controller: [Code].... From the view: [Code]....
The resulting link that gets created. [URL] If I change the controller code to read as follows:
[Code]....
I didn't make any changes in the view, only added those two lines to the controller and the following link is created: [URL] What am I missing here? This is consistent behavior, I was able to reproduce this in other areas of my application.
I am learning MultiView control.Here are question:I added 5 views in the MultiView but all views are tight together. I can not drag and drop another control such as text boxes or labels into view area.
I have an MVC view that contains a number of partial views. These partial views are populated using partial requests so the controller for the view itself doesn't pass any data to them. Is it possible to reload the data in one of those partial views if an action was triggered in another? For example, one partial view has a jqGrid and I want to refresh the data in another partial view when a user selects a new row in this grid. Is there a code example for this scenario (in C#) that I can look at to see what am I doing wrong? I am using ajax calls to trigger a new request but non of the partial views are refreshed so I am not sure if the issue is with the routing, the controller,
I have designed a collapsible nested gridview project using this article as a reference Collapsible Nested GridView with Paging using ASP.Net. I am trying to modify the code to collapse a gridview when another gridview is expanded so that only one nested gridview will be open at a time.
What is the best way to pass data to the layout page? Each one of my pages has a different model, but I need to pass consistant data to the layout page so I can show the current app they are on and the array of menu options that get passed into a method that builds the menu.
I have a problem with the layout of my datalist. Everything works except for the layout of the datalist. It's currently display 2 columns in a table layout. From the looks of it, when it switches over to the second column my format gets messed up and I mean there are random gaps in certain areas. Is there a way to fix this?
I have a view, which contains data from a Model class. In this view I have a <form> section and submit button, and using that to pass data to a controller works fine. What I'm struggling with is using a link that I also have on this view which passes data to a different view if the user clicks on it. I'm using HTML.ActionLink, and including a message, name of the view, and as the third parameter, the Model. However, when I get to the called View, the Model is null. Anyone know what's going on?
I would like to change the layout of the edit and insert templates to show multiple columns (instead of the default 1), and make the required fields show in the first column. Please point me in the direction I need to go.
I need to display the data using listView. I want the data to be displayed like this:
Student Name: John
Exam Grade MidTerm1 A MidTerm2 B
I want each item to looke like that. For this, I created a 'Student' class which has the Name and Exams(A list of Exam class objects) Properties. And the Exam class has ExamName and Grade properties. how I should specify the ItemTemplate and LayoutTemplate for the ListView??
I've dropped a GridView control onto an .aspx page and hooked it up to a datasource and it works fine. The problem is that its boring rows of information in a straight line on top of each, one after the other. Is it possible to fully customize the layout of a GridView to present the data anyway I want to. I like the idea of using the GridView for paging and sorting multiple records but if its restricted to row-over-row presentation I may have to write my own. Is it possible to display multiple records on the same row but that are contained in something similar to a TableCell control? I see there is an option called "Edit Template" but when I click on it, it just puts my cursor in an empty box. Not sure if this the option I need to master or not. I want to do something with a gridview like this:
record 1 | record 2 | record 3 | record 4| record 5
record1 | record 2 | record 3 | record 4 | record 5
record 1 | record 2 | record 3 | record 4 | record 5
record 6 | record 7 | record 8 | record 9 | record 10
record 6 | record 7 | record 8 | record 9 | record 10
record 6 | record 7 | record 8 | record 9 | record 10
Basically, changing the layout of the data from a single record per row to multiple records per row with records spanning multiple rows. Is this possible with GridView control?
That can be setup to display certain number of records per page and allow paging.
I have tried the repeater, but having issues with paging since its linked to a SQLDatasource.
I have done a search on "Paging Repeater" and all examples are setup with XML and other datasources and im not able to figure out how to modify that to work with my SQLDatasource.
I have an "Instruction" view, which have partial views for entering instruction details, different attributes for the instruction, different input values etc for the instruction. Each of which is seperate partial view. The main view have a save button which save all these details. "InstructionDetails" partial view have instruction name, description and its model is "Instruction". "Attribute" partial view have dropdown to select attribute and a textbox to enter its value. It also has an button "Add to list" which is intended to add attribute details to a table which is in the same partial view for attribute, its model is "Attribute". Same is the senario with input values. I have few problems where i am struck up with.When the "Add to list" is clicked in Attribute partial view, the values from the dropdown and textbx need to be listed to the table.When "Save" button is clicked the entire view need to be saved.