public PersonSearchResult GetPopupHtml( int personId, bool emailAsLink ) { var result = new PersonSearchResult(); result.Id = personId; result.PickerItemDetailsHtml = "No Details Available"; var html = new StringBuilder(); // Create new service (need ProxyServiceEnabled) var rockContext = new Rock.Data.RockContext(); var person = new PersonService( rockContext ).Queryable( "ConnectionStatusValue, PhoneNumbers" ) .Where( p => p.Id == personId ) .FirstOrDefault(); if ( person != null ) { Guid? recordTypeValueGuid = null; if ( person.RecordTypeValueId.HasValue ) { recordTypeValueGuid = DefinedValueCache.Read( person.RecordTypeValueId.Value ).Guid; } var appPath = System.Web.VirtualPathUtility.ToAbsolute( "~" ); html.AppendFormat( "<header>{0} <h3>{1}<small>{2}</small></h3></header>", Person.GetPersonPhotoImageTag( person, 65, 65 ), person.FullName, person.ConnectionStatusValue != null ? person.ConnectionStatusValue.Value : string.Empty ); html.Append( "<div class='body'>" ); var spouse = person.GetSpouse( rockContext ); if ( spouse != null ) { html.AppendFormat( "<div><strong>Spouse</strong> {0}</div>", spouse.LastName == person.LastName ? spouse.FirstName : spouse.FullName ); } int? age = person.Age; if ( age.HasValue ) { html.AppendFormat( "<div><strong>Age</strong> {0}</div>" , age ); } if ( !string.IsNullOrWhiteSpace( person.Email ) ) { if ( emailAsLink ) { html.AppendFormat( "<div style='text-overflow: ellipsis; white-space: nowrap; overflow:hidden; width: 245px;'><strong>Email</strong> {0}</div>", person.GetEmailTag( VirtualPathUtility.ToAbsolute( "~/" ) ) ); } else { html.AppendFormat( "<div style='text-overflow: ellipsis; white-space: nowrap; overflow:hidden; width: 245px;'><strong>Email</strong> {0}</div>", person.Email ); } } foreach ( var phoneNumber in person.PhoneNumbers.Where( n => n.IsUnlisted == false && n.NumberTypeValueId.HasValue ).OrderBy( n => n.NumberTypeValue.Order ) ) { html.AppendFormat( "<div><strong>{0}</strong> {1}</div>", phoneNumber.NumberTypeValue.Value, phoneNumber.ToString() ); } html.Append( "</div>" ); result.PickerItemDetailsHtml = html.ToString(); } return result; }