private string BuildAddNewPersistenceWebPageBody([AllowNull] DevicePersistenceData data)
        {
            HSHelper hsHelper = new HSHelper(HS);

            var devices       = hsHelper.GetDevices();
            var devicesSorted = devices.OrderBy(x => x.Value);
            var options       = new Dictionary <int, string>();

            foreach (var device in devicesSorted)
            {
                options.Add(device.Key, device.Value);
            }

            int deviceRefId = data != null ? data.DeviceRefId : -1;

            string measurement   = data != null ? data.Measurement : string.Empty;
            string field         = data?.Field ?? string.Empty;
            string fieldString   = data?.FieldString ?? string.Empty;
            string maxValidValue = data?.MaxValidValue?.ToString(CultureInfo.InvariantCulture) ?? string.Empty;
            string minValidValue = data?.MinValidValue?.ToString(CultureInfo.InvariantCulture) ?? string.Empty;
            var    trackedType   = data?.TrackedType ?? TrackedType.Value;
            string tags          = string.Empty;
            string id            = data != null ? data.Id : string.Empty;
            string buttonLabel   = data != null ? "Save" : "Add";
            string header        = data != null ? "Edit Persistence" : "Add New DB Persistence";

            if (data != null && data.Tags != null)
            {
                foreach (var tag in data.Tags)
                {
                    tags += Invariant($"{tag.Key}={tag.Value}{Environment.NewLine}");
                }
            }

            StringBuilder stb = new StringBuilder();

            IncludeResourceCSS(stb, "chosen.css");
            IncludeResourceScript(stb, "chosen.jquery.min.js");

            stb.Append(PageBuilderAndMenu.clsPageBuilder.FormStart("ftmDeviceChange", "IdChange", "Post"));

            stb.Append(@"<div>");
            stb.Append(@"<table class='full_width_table'>");
            stb.Append("<tr height='5'><td></td><td></td></tr>");
            stb.Append(Invariant($"<tr><td class='tableheader' colspan=2>{header}</td></tr>"));
            stb.Append(Invariant($"<tr><td class='tablecell'>Name:</td><td class='tablecell'>"));
            stb.Append(FormDropDownChosen(DeviceRefIdId, options, deviceRefId));
            stb.Append(Invariant($"&nbsp;"));
            stb.Append(FormButton(FillDefaultValuesButtonName, "Fill Default Values", "Fill default values"));
            stb.Append(Invariant($"</td></tr>"));
            stb.Append(Invariant($"<tr><td class='tablecell'>Measurement:</td><td class='tablecell'>"));
            stb.Append(DivStart(MeasurementDivId, string.Empty));
            stb.Append(HtmlTextBox(MeasurementId, measurement));
            stb.Append(DivEnd());
            stb.Append("</td></tr>");
            stb.Append(Invariant($"<tr><td class='tablecell'>Field for value:</td><td class='tablecell'>"));
            stb.Append(DivStart(FieldDivId, string.Empty));
            stb.Append(HtmlTextBox(FieldId, field));
            stb.Append(DivEnd());
            stb.Append("</td></tr>");

            stb.Append(Invariant($"<tr><td class='tablecell'>Max valid value:</td><td class='tablecell'>"));
            stb.Append(DivStart(MaxValidValueDivId, string.Empty));

            stb.Append(HtmlTextBox(MaxValidValueId, maxValidValue));
            stb.Append(DivEnd());

            stb.Append("</td></tr>");
            stb.Append(Invariant($"<tr><td class='tablecell'>Min valid value:</td><td class='tablecell'>"));
            stb.Append(DivStart(MinValidValueDivId, string.Empty));

            stb.Append(HtmlTextBox(MinValidValueId, minValidValue));
            stb.Append(DivEnd());

            stb.Append("</td></tr>");
            stb.Append(Invariant($"<tr><td class='tablecell'>Field for string value:</td><td class='tablecell'>{HtmlTextBox(FieldStringId, fieldString)}</td></tr>"));

            NameValueCollection trackedTypeCollection = CreateNameValueCreation <TrackedType>();

            stb.Append(Invariant($"<tr><td class='tablecell'>Record On Change of:</td><td class='tablecell'>{FormDropDown(TrackedTypeId, trackedTypeCollection, trackedType.ToString(), 100, string.Empty, false)}</td></tr>"));


            stb.Append(Invariant($"<tr><td class='tablecell'>Tags:</td><td class='tablecell'><p><small>Name and locations are automatically added as tags.</small></p>{TextArea(TagsId, tags, cols: 35)}</td></tr>"));
            stb.Append(Invariant($"<tr><td colspan=2>{HtmlTextBox(RecordId, id, type: "hidden")}<div id='{SaveErrorDivId}' style='color:Red'></div></td><td></td></tr>"));
            stb.Append(Invariant($"<tr><td colspan=2>{FormPageButton(EditPersistenceSave, buttonLabel)}"));

            if (data != null)
            {
                stb.Append(FormPageButton(DeletePersistenceSave, "Delete"));
            }

            stb.Append(FormPageButton(EditPersistenceCancel, "Cancel"));
            stb.Append(Invariant($"</td></tr>"));
            stb.Append("<tr height='5'><td colspan=2></td></tr>");
            stb.Append(@"</table>");
            stb.Append(@"</div>");
            stb.Append(PageBuilderAndMenu.clsPageBuilder.FormEnd());

            return(stb.ToString());
        }