Удалить значение строки запроса внутри повторителя - PullRequest
1 голос
/ 03 апреля 2020

У меня есть приведенный ниже код (детали удалены для удобства чтения)

      <asp:Repeater ID="rptMenu" runat="server" OnItemDataBound="rptMenu_ItemDataBound">
            <ItemTemplate>
                 <li>
                    <asp:HyperLink ID="hlCountries" runat="server" class="lang__option">
                        <asp:Image ID="imgGut" runat="server" />
                        <asp:Label ID="lblName" runat="server" Text=""></asp:Label>
                    </asp:HyperLink>
                </li>
            </ItemTemplate>
        </asp:Repeater>

В моем предмете привязаны данные (опять же некоторый код удален для удобства чтения, но может отображаться при необходимости)

    protected void rptMenu_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            //var nvc = HttpUtility.ParseQueryString(Request.Url.Query);
            //nvc.Remove("c");
            //string url = Request.Url.AbsolutePath + "?" + nvc.ToString();

            hlCountries.NavigateUrl = string.Format("{0}/?c={1}", 
            System.Web.HttpContext.Current.Request.Url.AbsoluteUri, p.Id);
        }
    }

Загрузка страницы. Я связываю данные.

При выборе гиперссылки меню добавляет к URL-адресу параметр загрузки некоторых данных на основе значения запроса, переданного в.

Когда следующий При нажатии на пункт в пункте меню добавляется еще один параметр, например

Page load: getdata
Click first item getdata?c=1
Click second item getdata?c=1c=2

(обратите внимание, как повторяется c =) Как можно избежать этого? Я добавил закомментированный выше код, но это не сработало?

1 Ответ

1 голос
/ 03 апреля 2020

Вы должны использовать UriBuilder при построении Uri вместо конкатенации строк

var builder = new UriBuilder(this.Request.Url);
var nvc = HttpUtility.ParseQueryString(this.Request.Url.Query);
nvc.["c"] = p.Id;
builder.Query = nvc.ToString();

hlCountries.NavigateUrl = builder.Uri.PathAndQuery;
...