Location objects in Razor

The problem

Many record properties are represented by Location objects, for example the owner location.  This post examines the requirements for displaying them in a razor template.

Location as additional field

Most additional fields are simple values, such as strings or numbers.  The location type additional field is slightly more complex.  To display properties of a location you need the correct settings in hptrim.config as well as the correct razor.

Config

Use the defaultProperties config element to specify the location properties you wish to return always, whether they are requested in a particular route or not.  The example below will ensure that FormattedName and FullFormatted name are available. In fact that specifies that we want FormattedName and FullFormatted for every single location object.

  <defaultProperties>
    <clear />
    <add name="Location" properties="FormattedName,FullFormattedName" />
    ...
  </defaultProperties>

Razor

Location objects when used in additional fields use the reference version of the Location object, LocationRef.  This example demonstrates displaying the FormattedName.

LocationRef policeOfficer = trimObject.GetPropertyOrFieldValue("PoliceOfficer") as LocationRef;
if (policeOfficer != null) {
  <h1>@policeOfficer.FormattedName</h1>
}

Location as a property

Of course a location property will work in a similar fashion to the additional field.  First make sure the properties you require are set in defaultProperties then insert them as show here:

<h1>@trimObject.OwnerLocation.FormattedName</h1>

A pre-requisite

The above all assumes that you have pre-requested the additional field or property via the 'properties' request parameter.  For razor applications this is often done in the route, for example:

<add
  name="MyRoute"
  model="RecordFind"
  template="MyTemplate"
  properties="NameString,RecordOwnerLocation,PoliceOfficer"
/>