I wrote some code a few weeks ago, to take a string similar to
seq[]=8&seq[]=7&seq[]=5&seq[]=1&seq[]=4&seq[]=3&seq[]=6&seq[]=0&seq[]=2
and put it into a gallery, to be ordered by jQuery UI's Sortable, which works all good, however, I'm concerned about the amount of times I .Replace the values in the string.
This code has been bugging me, because I'm employed to rewrite unethical code, and the few times I actually write code from scratch, it looks like this. So, basically, I would love your opinions on this code.
To clarify, the imgMgr is to get the JSON string, and the nodelist is for getting an XML doc of images from the imgMgr.
#region BuildGallery
private void BuildGallery()
{
    StringBuilder sb = new StringBuilder();
    sb.Append("<div class=\"controls\"><center><button class=\"js-serialize\" style=\"border: 0;height: 25px;background-color: #F4FA58;margin-bottom: 8px;\">Save Layout</button></center></div><div class=\"sortable\"><ul id=\"sortable\">");
    int pos = 0;
    string str = "";
    ImageManagerV1 imgMgr = new ImageManagerV1();
    str = imgMgr.galleryOrder(LocalConfig.ImageManagerAuthCode, Convert.ToInt32(hdnListingId.Value), "");
  //  str = "seq[]=8&seq[]=7&seq[]=5&seq[]=1&seq[]=4&seq[]=3&seq[]=6&seq[]=0&seq[]=2";
    str.Replace("seq[]=","-").Split('-');
    XmlNodeList nodelist = xmlDoc.SelectNodes("image");
    str = str.Replace("&", "");
    if (str == "") {
        for (int i = 0; i < nodelist.Count; i++) {
            str += "seq[]=" + i;
        }
    }
    string[] strNew = str.Replace("seq[]=", "-").Split('-');
        str = "";
        for (int i = 0; i < strNew.Length; i++) {
            if (strNew[i] != "") {
                str += "-" + strNew[i];
            }
        }
    if (nodelist.Count > strNew.Length) {
        for (int f = strNew.Length; f < nodelist.Count; f++) {
            str += "-" + f;
        }
    }
    int val2 = 0;
    string[] stringArray = str.Split('-');
    foreach (string num in stringArray) {
        var newNum = num.ToString();
        if (newNum.Length > 0) {
            val2 = Convert.ToInt32(newNum);
            XmlNode image = nodelist[val2];
            string thumbpath = image.Attributes["thumb"].Value;
            string detailpath = image.Attributes["detail"].Value;
            string fileName = detailpath.Substring(detailpath.LastIndexOf(@"/") + 1);
            sb.AppendFormat("<li class=\"thumb ui-state-default\" id=\"seq_{0}\">", val2);
            sb.AppendFormat("<img src=\"{0}\" alt=\"{2}\" title=\"Gallery: {2}\" width=\"90\" height=\"90\"/><a href=\"\" data=\"{4}\"class=\"makeHero\">Make Hero</a><a href=\"\" data=\"{4}\"class=\"deleteImage\">Del</a>", thumbpath, detailpath, listing.ListingName, pos, fileName);
            sb.Append("</li>");
        }
    }
    sb.Append("</ul><div class=\"clear\"></div></div>");
        if (sb.Length > 0)
        {
            litGallery.Text = string.Format("<div id=\"listing-gallery\" class=\"listing-gallery\">{0}</div>", sb.ToString());
        }
    }
#endregion