private static string GetReferenceField(this HtmlHelper html, PropertyContext propertyContext, string id, string tooltip, IList<ElementDescriptor> childElements, bool addToThis, bool readOnly, bool noFinder) { var tag = new TagBuilder("div"); tag.AddCssClass(IdConstants.ObjectName); if (!propertyContext.Property.IsVisible(propertyContext.Target)) { var existingValue = propertyContext.GetValue(html.Facade()); string value = existingValue == null ? String.Empty : Encode(html.Facade().OidTranslator.GetOidTranslation(existingValue)); tag.InnerHtml += html.Encrypted(id, value).ToString(); propertyContext.IsPropertyEdit = false; } else { if (readOnly) { var valueNakedObject = propertyContext.GetValue(html.Facade()); string valueId = valueNakedObject == null ? String.Empty : Encode(html.Facade().OidTranslator.GetOidTranslation(valueNakedObject)); tag.InnerHtml += html.ObjectIcon(propertyContext.Property.GetValue(propertyContext.Target)) + html.GetFieldValue(propertyContext) + html.CustomEncrypted(id, valueId); propertyContext.IsPropertyEdit = false; } else if (propertyContext.Property.IsChoicesEnabled != Choices.NotEnabled) { IEnumerable<SelectListItem> items = html.GetItems(id, propertyContext); tag.InnerHtml += html.ObjectIcon(propertyContext.Property.GetValue(propertyContext.Target)) + html.DropDownList(id, items, new { title = tooltip }) + html.GetMandatoryIndicator(propertyContext) + html.ValidationMessage(id); } else { var valueNakedObject = html.GetExistingValue(id, propertyContext); var suggestedItem = html.GetSuggestedItem(id, valueNakedObject); string valueId = suggestedItem == null ? String.Empty : Encode(html.Facade().OidTranslator.GetOidTranslation(suggestedItem)); if (!propertyContext.Target.IsTransient) { // do not only allow drag and drop onto transients - otherwise attempt to validate // may depend on missing fields/data. cf check at top of AjaxControllerImpl:ValidateProperty string url = html.GenerateUrl("ValidateProperty", "Ajax", new RouteValueDictionary(new { id = Encode(html.Facade().OidTranslator.GetOidTranslation(propertyContext.Target)), propertyName = propertyContext.Property.Id })); tag.MergeAttribute("data-validate", url); } //Translates to: Only render finder if the Context is FindMenu enabled AND //calling code has not overridden it by setting noFinder to true. noFinder = noFinder || !propertyContext.IsFindMenuEnabled(); tag.InnerHtml += html.ObjectIcon(suggestedItem) + html.GetFieldValue(propertyContext, suggestedItem, noFinder) + html.GetMandatoryIndicator(propertyContext) + html.ValidationMessage(propertyContext.Property.IsAutoCompleteEnabled ? propertyContext.GetAutoCompleteFieldId() : id) + html.CustomEncrypted(id, valueId); propertyContext.IsPropertyEdit = false; } } AddInsertedElements(childElements, addToThis, tag); return tag.ToString(); }