Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Jake Platford 7 posts 109 karma points
    Sep 13, 2021 @ 15:57
    Jake Platford
    1

    Html.RenderAction returning an error

    I am having issues with using Html.RenderAction, currently I have the following in the head of the site on the master page:

    @{
        Html.RenderAction("RenderMetaTags", "MetaTags");
    }
    

    This will render a partial:

    @model MetaTagsModel 
    @* do stuff *@
    

    This is the controller:

    public class MetaTagsController : SurfaceController
    {
        public MetaTagsController()
        {
    
        }
    
        [ChildActionOnly]
        public ActionResult RenderMetaTags()
        {
            IPublishedContent currentNode = CurrentPage;
            string urlSegment = Request.Url.Scheme + "://" + Request.Url.Host;
    
            MetaTagsModel metaTagsModel = new MetaTagsModel()
            {
                MetaTitle = currentNode.MetaTitle(),
                MetaDescription = currentNode.MetaDescription(),
                MetaImageUrl = currentNode.MetaImage(),
                IsLiveSite = bool.Parse(ConfigurationManager.AppSettings["IsLiveSite"]),
                CanonicalUrl = urlSegment + currentNode.Url()
            };
    
            return base.PartialView("~/Views/Partials/Custom/Template/MetaTags.cshtml", new MetaTagsModel());
        }
    }
    

    I'm doing it this way because there'll be different logic for how meta information is pulled from the CMS and then rendered on the page. I wanted all of that logic to be in the controller and not the view (I can just use RenderPartial if it was all in the view).

    I am getting the following error, which is produced by the Html.RenderAction line. Debugging never hits the controller.

    [NullReferenceException: Object reference not set to an instance of an object.]
       Umbraco.Web.Mvc.ContainerControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +83
       Umbraco.Web.Mvc.UmbracoControllerFactory.CreateController(RequestContext requestContext, String controllerName) +93
       Umbraco.Web.Mvc.RenderControllerFactory.CreateController(RequestContext requestContext, String controllerName) +14
       Umbraco.Web.Mvc.MasterControllerFactory.CreateController(RequestContext requestContext, String controllerName) +53
       System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +187
       System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +50
       System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48
       System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
       System.Web.Mvc.<>c__DisplayClass2_0.<BeginProcessRequest>b__0() +31
       System.Web.Mvc.ServerExecuteHttpHandlerWrapper.Wrap(Func`1 func) +27
       System.Web.Mvc.ServerExecuteHttpHandlerAsyncWrapper.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +98
       System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride) +2013
       System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage) +77
       System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm) +25
       System.Web.HttpServerUtilityWrapper.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm) +20
       System.Web.Mvc.Html.ChildActionExtensions.ActionHelper(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues, TextWriter textWriter) +468
       System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper htmlHelper, String actionName, String controllerName) +35
    

    Based on other questions/answers I've seen, and other forum posts, I can't see what I'm doing wrong?

  • Andrew Z 2 posts 93 karma points
    Sep 14, 2021 @ 00:13
    Andrew Z
    101

    It probably is just not part of your code sample posted here, but make sure your Surface Controller is part of a namespace, Umbraco won't load it up otherwise.

    See https://our.umbraco.com/documentation/reference/routing/surface-controllers

  • Jake Platford 7 posts 109 karma points
    Sep 17, 2021 @ 08:14
    Jake Platford
    1

    Thanks Andrew, the namespace got it!

  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies