R – Encapsulating User Controls in ASP.NET MVC

ascxasp.net-mvcuser-controls

Sorry if this is a basic question – I'm having some trouble making the mental transition to ASP.NET MVC from the page framework.

In the page framework, I often use ASCX files to create small, encapsulated chunks of functionality which get inclded in various places throughout a site. If I'm building a page and I need one of these controls – I just add a reference and everything just works.

As far as I can tell, in MVC, the ASCX file is just a partial view. Does this mean that wherever I want to add one of these units of functionality I also have to add some code to the controller's action method to make sure the relevant ViewData is available to the ASCX?

If this is the case, it seems like a bit of a step backwards to me. It means, for example, that I couldn't just 'drop' a control into a master page without having to add code to every controller whose views use that master page!

I suspect I'm missing something – any help would be appreciated.

Thanks,
– Chris

Best Answer

As far as I can tell, in MVC, the ASCX file is just a partial view. Does this mean that wherever I want to add one of these units of functionality I also have to add some code to the controller's action method to make sure the relevant ViewData is available to the ASCX?

Yes.

However, you can use a RenderAction method in your view instead of RenderPartial, and all of your functionality (including the data being passed to the sub-view) will be encapsulated.

In other words, this will create a little package that incorporates a controller method, view data, and a partial view, which can be called with one line of code from within your main view.