private static string GetTextOrRefFieldValue(this HtmlHelper html, PropertyContext propertyContext, IObjectFacade valueNakedObject, bool inTable = false) { if (valueNakedObject.Specification.IsCollection) { valueNakedObject.Resolve(); } string link = "{0}"; if (!propertyContext.Property.Specification.IsParseable && !propertyContext.Property.IsCollection) { string displayType = html.ViewData.ContainsKey(propertyContext.GetFieldId()) ? (string)html.ViewData[propertyContext.GetFieldId()] : String.Empty; bool renderEagerly = RenderEagerly(propertyContext.Property); link = html.ObjectLink(link, IdConstants.ViewAction, valueNakedObject.Object) + (inTable ? "" : html.GetObjectDisplayLinks(propertyContext)); if (displayType == IdConstants.MaxDisplayFormat || renderEagerly) { var inlineNakedObject = propertyContext.GetValue(html.Facade()); bool anyEditableFields; TagBuilder elementSet = ElementDescriptor.BuildElementSet(html.ViewObjectFields(inlineNakedObject, propertyContext, x => true, null, out anyEditableFields)); html.AddAjaxDataUrlsToElementSet(inlineNakedObject, elementSet, propertyContext); elementSet.AddCssClass(IdConstants.FieldContainerName); elementSet.GenerateId(html.IdHelper().GetFieldContainerId(inlineNakedObject)); link = link + html.GetEditButtonIfRequired(anyEditableFields, inlineNakedObject) + elementSet; } } string title = html.GetDisplayTitle(propertyContext.Property, valueNakedObject); if (propertyContext.Property.NumberOfLines > 1) { int typicalLength = propertyContext.Property.TypicalLength; int width = propertyContext.Property.Width; typicalLength = typicalLength == 0 ? 20 : typicalLength; width = width == 0 ? typicalLength : width; if (inTable) { // truncate to width if (title.Length > width) { const string elipsis = "..."; int length = width - elipsis.Length; title = title.Substring(0, length > 0 ? length : 1) + elipsis; } } } return String.Format(link, title); }