How To Structure MVC 2 Project With Areas Sensibly
Aug 24, 2010
I want to structure my ASP.NET MVC 2 web application sensibly using Areas. The application consists of the two main parts Website which is the default part and Dashboard which administrates the site using a CMS. (Probably, more Areas will follow later on.)
How do I structure my project best? Should I ...
create the Area Dashboard and put the stuff belonging to the Website part into the main application folder or should I create both Areas Website and Dashboard?
Additionally, where should I place my Entity Data Model and the corresponding Repository classes that have to be accessed by both Areas?
Let's say I have a Visual Studio solution with a Web project, a BLL project, and a DAL project. I'm trying to follow the repository pattern keeping my SQL code in the DAL with an interface that is referenced by the BLL.
I have a handful of common solutions for things such as error handling, usage logging, and other things that can be considered utility functions (i.e. not in the business spec). I'm keeping these in a Common project.
Here are a few ideas I've had with regards to structuring the Common project...
Bundle SQL with logic in a given class
Create a layered solution within the Common project
Discard the Common project and put utility functions in with BLL/DAL
Is one of these ideas better/worse than the other? Does anyone have a better solution?
It's worth noting that these utility functions will be reused in a variety of other applications.
I am using asp.net 3.5 and I am trying to create a project structure (asp.net web solution with UI/Business/Data access) which would be like a base and ready for any new projects in my team and all could use this standard structure only as a base(outer boundary) and they can expand the structure. Also adding on to it I wanted to include certain features like adding libraries of reusable code/functions, so that every team member could use functions from my library within this base structure. To summarize the above, I need to create standard .net project structure/framework/architecture with resusable code library included in it. How can I do this..
I am not new to ASP.Net application development but I haven't used some of the new frameworks or features that are used in applications these days.
For cross-cutting concerns, things like: Logging, Caching and DAAB are used in projects these days to implement proven and efficient source code from either Microsoft or other third party vendors such as Log4Net for logging purposes.
I am developing an ASP.Net web application for my client which is into Multi Level Marketing Business. I need to show him the treeview of the members under any member he chooses. For eg. he selects 'Member A' from the DropDownList, and clicks Submit, he should get a treeview of all the members under 'Member A'
I've created a deployment package in visualStudio, the package is generated, but it has an awfull structure, which is basically, the path where I've my project(e.g "CONTENT/D_C/WorkSpace/MyCustomer/TheProjectName/TheDevelopmentBranchFolder/TheCurrentBranch/TheWebApplicationName/obj/Release/Package/PackageTmp/TheSiteIsFinallyHere!!!"
It's problematic, because with the web deployer of IIS, it recreate this path.
So how can I avoid the "D_C/WorkSpace/MyCustomer/TheProjectName/TheDevelopmentBranchFolder/TheCurrentBranch/TheWebApplicationName/obj/Release/Package/PackageTmp" part in visual studio?
In above link you clearly describe (How to display directory folder structure).
The path only works when the folder insight the project.
When I put folder outside the project it didn't work. What type of changes I need to made to acces the folder outside the poject. & How can I show other details of files which are including in folders Like. Last Modified Created Date, Modified Date etc..
For those who setup muli project areas in ASP.NET MVC 2 in VS 2010, I have a few questions for you:
Can other project areas use one master page? Or does each have to have their own master page? What about the web.config file? Does each area need the config file? Or does it rely on the master? I tried removing the master page reference, but I get an intellisense error and failed to monitor changes after following this: [URL]
I assume I need to leave in the master page so that at least works.
I'm following this blog post about setting up ELMAH with MVC: [URL] I've only done part 1. Everything works correctly if I simply go to the Home controller, and then cause an error. I can view /elmah.axd as well, and my errors are logging in the database correctly.
However, I've added an area to my application named Admin. If I navigate to /Admin, I receive the following error:
System.MissingMethodException: No parameterless constructor defined for this object. public override IController CreateController(RequestContext requestContext, string controllerName) { var controller = base.CreateController(requestContext, controllerName); //Error here var c = controller as Controller;
I'm assuming this has something to do with my Area.
EDIT for jfar:
For instance, I have an Employees controller in my Admin area:
public class EmployeesController : Controller { private IEmployeesRepository employeesRepository; public EmployeesController(IEmployeesRepository employeesRepository) { this.employeesRepository = employeesRepository; } //... }
To use separation of concern and to optimize the clearness of the controllers we decided to split each action of a controller into different controllers (FunctionalLocationEditController, FunctionalLocationCreateController and such).
Problem now is the Global.asax is currently a bit big for just a few pages registered in routes.
We would need to use an area type of mechanism but for business reason we are not ready to upgrade just yet to MVC2.
Basically, is there a way in MVC1 to map the Urls to something like <folder>/<controller>/<action> ?
Been starting a new project (MVC 2) based on the first version of the same application (MVC 1).In the first we breaked out Controllers and Views into seperate projects, which resuted in a clean and organized structure.Now with version 2, I've been reading about this "Areas".Keeping the old structure and using areas sounds like overkill to me. Keeping the old way OR use Areas is what I'm trying to decide on.Just wanted to hear your thoughts about this.... Is it really that usefull (ie have other benifits)? No use to make some major changes just because something is there IMHO
I am wondering if MVC offers a handy function to iterate through all areas. I know I can search the sub-directories of Areas to achieve this. I am just curious.
I'm starting a new ASP.NET MVC project, and I decided to put my controllers in a different assembly. Evertyhing works fine, but I have hit a problem: I created a new area in my MVC Project, called Administration. I have an AdminController Class in my seperate assembly which is supposed to return views from my Admin area, but everytime it tries to return a view, it looks for it in the wrong place (~/Admin/SomeView.cshtml Instead of ~/Administration/Admin/SomeView.cshtml) How can I tell the controller to look for views in the wanted area?
is there some way to share a partial razor view between areas? For example a login partial, it is found if i use @Html.Partial("_LoginPartial") but the URLs Html.ActionLink generates are local to the calling area (even though the partial itself is not part of the area).
_LoginPartial.cshtml is in /Views/Shared/_LoginPartial.cshtml Calling view is inside /Areas/Somearea/Views
Links generated are like: [URL] But should always be: [URL]
If I create an Area, does it have to reside off of the root? Or can I create it in a sub-folder? If so, how to you set the MapRoute so you can navigate to rootSecureAreasAdmin?
I created an Area in my application named Admin. It's pretty basic, looks like this: Areas
Admin
Controllers
CompaniesController.cs
Models Views
Companies Index.aspx AdminAreaRegistration.cs
When I try to view my Index page by going to /Admin/Companies, I get a "The resource cannot be found" message. I find it weird that I don't get any sort of error message.
When I turn on Code Coverage in my test settings, on a project that references the Unity DI container I get the following error:
Cannot initialize the ASP.NET project'{Project Name}'.
The event log specifies the following reason:
Could not load file or assembly 'Microsoft.Practices.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. Strong name signature could not be verified.
I have two areas: Frontend and Backend - I would like to have two different error pages - so I have two files NotFound in /Areas/Frontend/Views/Shared/NotFound and /Areas/Backend/Views/Shared/NotFound. I have added also to Web.config in area Frontend: <customErrors mode="On" defaultRedirect="Error"> <error statusCode="403" redirect="NoAccess" /> <error statusCode="404" redirect="/Areas/Frontend/Views/Shared/NotFound" /> </customErrors>
and in area Backend in Web.config: <customErrors mode="On" defaultRedirect="Error"> <error statusCode="403" redirect="NoAccess" /> <error statusCode="404" redirect="/Areas/Backend/Views/Shared/NotFound" /> </customErrors>
But when I come in bad website url - for example: http://localhost/Backend/blablabla I don't see my NotFound website but:
Server Error in '/' Application.
The resource cannot be found. Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.
In my application I have controller named `Snippets` both in default area (in application root) and in my area called `Manage`. I use T4MVC and custom routes, like this:
I've got IIS 6 with a self-signed certificate installed. This is now securing the whole site (all urs are HTTPS). How do I only apply HTTPS to logged in areas, leaving publicly viewable data with HTTP?
This page is a directory search, it has controls identified by record ID, however there exists a situation where there can be more than one result with the same record ID, thus making .NET barf. I had originally implemented a check that just didn't put the control on the page, if it was already there, but we've been getting negative feedback.
My question is this: Is there a way to put the same control in two places at once, for instance having if a user checks one, the corresponding one checks as well? I'm not terribly well versed in how .NET behaves, but I'll try to provide as much additional context as possible, if needed.
EDIT: Here's the updated code that generates the controls by looping over a datatable of results
Dim cbxSendInfo As CheckBox Dim strCheckboxID As String = "cbxSendInfo-" & drOrganizer("ID") & "-" & i Debug.text = Debug.text & " Loading Checkbox (" & strCheckboxID & ")...<br />" cbxSendInfo = New CheckBox cbxSendInfo.ID = strCheckboxID cbxSendInfo.enableViewState = true
And here's the code that finds the controls and builds the contact list:
Dim strCheckboxID As String = "cbxSendInfo-" & drOrganizer("ID") & "-" & i Dim cbxSendInfo As CheckBox = Me.tblResults.FindControl(strCheckboxID) If cbxSendInfo.Checked Then alOrganizers.Add(drOrganizer("ID")) End If
Where drOrganizer("ID") is the record ID, and i is the result record number.
I know this is a terrible way to do this, at least from my background, but like I said, this is inherited code that's been hacked to pieces.