Skip to main content

Umbraco C# Razor - Parsing XML example using uComponents URL picker to a list of Documents from the Media section


The code below shows you how to get a chosen list of documents using the uComponents Multi-Url picker

The Code that is comment out highlights the steps to get to the end result.

The Code shows how to parse raw XML in Razor.



Here is what the code does:

Step 1) "Get the Document List:"

var urlPicker = Model.GetPropertyValue<UrlPickerState>("pickDocuments");

"pickDocuments" is the field in my Document Type it is a uComponents Multi Midia Picker

Step 2) Get Type and display full string:

This code is comment out - if you uncoment it, it will show you the raw XML that needs to be parsed, for example:

@urlPicker  displays the xml:

<multi-url-picker><url-picker mode="Media"><new-window>False</new-window><node-id>1721</node-id><url>/media/53699/learning-log-v4-macroless-.xls</url><link-title /></url-picker><url-picker mode="Media"><new-window>False</new-window><node-id>1676</node-id><url>/media/46249/TestDocumentOne.docx</url><link-title /></url-picker></multi-url-picker>

So from the XML, we can see the properties/fields we want to write out.  For example "url", or "node-id".

Step 3) The Code then gets the XML and cleans it up a bit by remvoing the minus sign from some of the elements.  The reason for this is that later on in the code, razor was treating the minus sign as a subtraction, resulting in an error.

var xml = @Library.ToDynamicXml(Model.GetPropertyValue<UrlPickerState>("pickDocuments").Replace("-", ""));

Step 4) Loops around the XML records, gers the Node Id and writes out the links

The Code:


@inherits umbraco.MacroEngines.DynamicNodeContext
@using uComponents.Core
@using uComponents.DataTypes.UrlPicker.Dto;

@{                  
if (Model.HasValue("pickDocuments"))
{
// 1) Get the documents List
        var urlPicker = Model.GetPropertyValue<UrlPickerState>("pickDocuments");

//2) Get Type and display full string:
   //@urlPicker.GetType()
   //@urlPicker

// 3 Get the XML and clean it up; we need to remove the minus sign as node-id for example does notwork
var xml = @Library.ToDynamicXml(Model.GetPropertyValue<UrlPickerState>("pickDocuments").Replace("-", ""));

foreach(var value in xml)
{
// Ger the Node referenced in the XML
var thisNode = Library.NodeById(value.nodeid);


<p>&bull; <a href="@thisNode.Url">@thisNode.Name</a></p>
}
}
}


Result:

This screen shows the Umbraco user selecting multiple documents from the media section:


This screen show the Output on the web page (along with the RAW XML, which should be commented out):





Comments

Popular posts from this blog

Create a .NET Contact Form that Gets the Last Url Visited in C# Can also be Used in Umbraco

This is a Simple Contact From done in C# .Net and also can be used in Umbraco.  Paste the code in to Visual Web Developer for a better view. The important bits are coment in the second file.  One of the Commented out lines highlights how to get the mailto address from an Umbraco field. The code Below includes the myContactForm.ascx.cs codebehind file and the myContactForm.ascx file. 1) The myContactForm.ascx file:  <%@ Control Language="C#" AutoEventWireup="true" CodeFile="ContactFormforPublications.ascx.cs" Inherits="usercontrols_ContactFormPublications" %> <div class="contact-form" id="contactForm" runat="server">     <h3>Request a Publication</h3>     <div class='int'>         <form runat="server">         <asp:Panel DefaultButton="contactFormSubmit" runat="server">         <fieldset>             <div class='

Umbraco 7 - C# Razor - Passing a parameter variable from a Template to a Partial View.

Passing a parameter variable from a Template to a Partial View Example - Passing a Page Id to a Partial View. In the example below we are passing 3 page Ids (1090. 1091, 1092) to a partial view.  The Partial View will display the details for each of these nodes on a home page.  See final output below. 1) In your Template: @Html.Partial("HomePageLinksToLandingPages", new ViewDataDictionary{{ "pageId", 1090}}) @Html.Partial("HomePageLinksToLandingPages", new ViewDataDictionary{{ "pageId", 1091}}) @Html.Partial("HomePageLinksToLandingPages", new ViewDataDictionary{{ "pageId", 1092}}) 2) The Partial View: @inherits Umbraco.Web.Mvc.UmbracoTemplatePage @{ var thisPageId = 1090; var stringPage = @ViewData["pageId"]; thisPageId = Convert.ToInt32(stringPage); } <div class="col-md-4"> <arti