Best Practice for Passing Parameter via URL to Page/SurfaceController?
Hi there,
I know there are a lot of posts about this and I've used different approaches successfully in the past, both URLRewrite rule and a custom ContentFinder. I'm starting another project and have the following requirement and just want to know what the best approach is.
Scenario is I have a set of pages that use the same DocumentType. This DocumentType has a SurfaceController and in that surface controller I want to run some custom code based on a parameter passed via the url. So my urls would look like this:
domain/page/doctypepage/id
or
domain/page/subpage/doctypepage/id
etc...
It seems like such a simple thing to just want to access a single value that's added to the end of the url so the process of creating custom routes, content finder etc all seems so complicated and I just wanted to check to see what others are doing for this type of scenario to make sure I'm not over thinking things?
Since your set of pages all use the same Document Type then this would be a good candidate for route hijacking requests made to this particular Document Type:
Create a blank MVC controller with the naming convention DocumentTypeAliasController and have it inherit from RenderMvcController; the create an Index ActionResult that expects to receive a RenderModel eg:
public class DocTypeAliasController : Umbraco.Web.Mvc.RenderMvcController
{
public ActionResult Index(Umbraco.Web.Models.RenderModel model)
{
return CurrentTemplate(model);
}
}
Now any request to a page based on your Document Type will be hijacked and call this controller / default index action instead.
If your page is published with a template name alias 'standardPage' then you can create an ActionResult that matches this:
public ActionResult StandardPage(Umbraco.Web.Models.RenderModel model, string myparameter)
{
// do something with myparameter
// build a custom model that inherits from RenderModel etc
return CurrentTemplate(model);
}
this will enable you to read a parameter on the querystring in the action result and action your custom code dependent on the value.
You could also build a custom model here to use in your Views.
Best Practice for Passing Parameter via URL to Page/SurfaceController?
Hi there,
I know there are a lot of posts about this and I've used different approaches successfully in the past, both URLRewrite rule and a custom ContentFinder. I'm starting another project and have the following requirement and just want to know what the best approach is.
Scenario is I have a set of pages that use the same DocumentType. This DocumentType has a SurfaceController and in that surface controller I want to run some custom code based on a parameter passed via the url. So my urls would look like this: domain/page/doctypepage/id or domain/page/subpage/doctypepage/id etc...
It seems like such a simple thing to just want to access a single value that's added to the end of the url so the process of creating custom routes, content finder etc all seems so complicated and I just wanted to check to see what others are doing for this type of scenario to make sure I'm not over thinking things?
Thanks in advance for any feedback. Phill
Hi Phill
Since your set of pages all use the same Document Type then this would be a good candidate for route hijacking requests made to this particular Document Type:
https://our.umbraco.org/documentation/reference/routing/custom-controllers
Create a blank MVC controller with the naming convention DocumentTypeAliasController and have it inherit from RenderMvcController; the create an Index ActionResult that expects to receive a RenderModel eg:
public class DocTypeAliasController : Umbraco.Web.Mvc.RenderMvcController { public ActionResult Index(Umbraco.Web.Models.RenderModel model) { return CurrentTemplate(model); } }
Now any request to a page based on your Document Type will be hijacked and call this controller / default index action instead.
If your page is published with a template name alias 'standardPage' then you can create an ActionResult that matches this:
// do something with myparameter // build a custom model that inherits from RenderModel etc return CurrentTemplate(model); }
this will enable you to read a parameter on the querystring in the action result and action your custom code dependent on the value.
You could also build a custom model here to use in your Views.
regards
Marc
is working on a reply...