How to get a Published Content item from a Content Picker Macro Parameter in Umbraco

Posted written by Nisreen Almasri on November 09, 2017 Umbraco

This post shows you how you can get to the IPublishedContent item from a Content Pick Macro Parameter in Umbraco. It is a guest post by Nisreen Almasri from Sweden.

The scenario

I feel my question is silly and can be answered straightforward but after googling and searching here and there, discover that nothing is silly with Umbraco:)

I have a login form and many types of members, according to the type of member (which group he belongs to) must be forwarded to a specific page. and because we have a multi-language website so I can use hardcoded URLs because the name of the page varies.

to summarize that, I have all related pages as macro parameters (content picker) but I need to reach the node id for each to use this code

Response.Redirect(library.NiceUrl(Convert.ToInt32(Id)));

What I tried at first

I used this at the beginning

var urlDownload = Model.MacroParameters["urlDownload"];

But it returns the UDI, not the node ID, because my version of Umbraco has property value converters enabled.

"umb://document/f875c2c828d04a2dbdb2dcf80d841a9f"

The solution

Finally, the solution was using this piece of code:

var contDownload = Umbraco.TypedContent(urlDownload);

and I could reach the id easily...

Response.Redirect(library.NiceUrl(Convert.ToInt32(contDownload.Id)));

Final code

Here is the whole code:

@{
    var urlDownload = Model.MacroParameters["urlDownload"];
    var urlSale = Model.MacroParameters["urlSale"];
    var urlExport = Model.MacroParameters["urlExport"];
    var urlAD = Model.MacroParameters["urlAD"];

    var contDownload = Umbraco.TypedContent(urlDownload);
    var contSale = Umbraco.TypedContent(urlSale);
    var contExport = Umbraco.TypedContent(urlExport);
    var contAD = Umbraco.TypedContent(urlAD);

    var currentMember = User.Identity.Name;

    var t = Roles.GetRolesForUser(currentMember).FirstOrDefault();

    if (Members.GetCurrentLoginStatus().IsLoggedIn && Request.UrlReferrer != null)
    {
        switch (t)
        {
            case "Download":
                Response.Redirect(library.NiceUrl(Convert.ToInt32(contDownload.Id)));
                break;
            case "Sale":
                Response.Redirect(library.NiceUrl(Convert.ToInt32(contSale.Id)));
                break;
            case "Exporting":
                Response.Redirect(library.NiceUrl(Convert.ToInt32(contExport.Id)));
                break;
            default:
                Response.Redirect(library.NiceUrl(Convert.ToInt32(contAD.Id)));
                break;
        }
    }
}