Элемент управления гиперссылками не отображается в ContentTemplate в ASP.NET

#c# #asp.net

#c# #asp.net

Вопрос:

 <ContentTemplate>
        <div class="detail_purchase_button">

            <a class="commandbutton" href='/Courses?RestoreFilters=1'>Return to Catalog</a>
            amp;nbsp;amp;nbsp;
            <%# linkAddToCart %>

        </div>
    </ContentTemplate>

string url = "/Cart?AddItem={0}", DataItemID;
    linkAddToCart = new HyperLink();
    linkAddToCart.CssClass = "commandbutton";
    linkAddToCart.NavigateUrl = url;
    linkAddToCart.Text = "Add To Cart";
  

Кнопка в теге привязки отображается на странице. Однако кнопка гиперссылки вообще не отображается.
Второй блок кода выполняется в событии Page_Load (я помещу его в метод после того, как он заработает) и ссылается на общедоступное поле гиперссылки.

Спасибо за любую помощь.

Комментарии:

1. Здесь трудно догадаться. Пожалуйста, напишите небольшой и лаконичный код и протестируйте его на своей стороне или опубликуйте здесь, если возникнут какие-либо проблемы.

Ответ №1:

Определите элемент управления гиперссылками с помощью разметки в файле презентации.

 <asp:HyperLink id="lnkAddToCart" runat="server" />
  

Разместите его там, где вам нужно. Вы все еще можете ссылаться на его свойства в своем коде.

 lnkAddToCart.CssClass = "commandbutton";
lnkAddToCart.NavigateUrl = url;
// etc.
  

Если бы вместо этого вы определяли элемент управления динамически, вам нужно было бы добавить его в соответствующий контейнер, такой как панель или заполнитель

 <asp:Panel id="theContainer" runat="server" /> or 
<asp:PlaceHolder id="theContainer" runat="server" />
  

 // define the HyperLink as in your original code snippet 
theContainer.Controls.Add(lnkAddToCart); 
  

Однако, если вам абсолютно не нужно динамически создавать элемент управления, лучше всего добавить его в ASPX во время разработки. Вы всегда можете установить Visible="false" (в разметке, .Visible = false; в коде), не нужно ли отображать его постоянно.

Ответ №2:

Ваш вопрос кажется немного расплывчатым, но я пытаюсь ответить на основе того, что я понимаю из него. Пожалуйста, проигнорируйте, если я неправильно понял ваш вопрос.

Невозможно добавить гиперссылку, подобную этой. Сначала поместите заполнитель (т. Е. панель) в contenttemplate, а затем добавьте гиперссылку в заполнитель из кода, находящегося за ним.

         <a class="commandbutton" href='/Courses?RestoreFilters=1'>Return to Catalog</a>
        amp;nbsp;amp;nbsp;
        <asp:Panel id="pnlLink" runat="server"></asp:Panel>

    </div>
</ContentTemplate>
  

А затем в коде, лежащем в основе

 string url = "/Cart?AddItem={0}", DataItemID;
linkAddToCart = new HyperLink();
linkAddToCart.CssClass = "commandbutton";
linkAddToCart.NavigateUrl = url;
linkAddToCart.Text = "Add To Cart";
pnlLink.Controls.Add(linkAddToCart);
  

Ответ №3:

Попробуйте задать идентификатор для linkAddToCart элемента управления, который вы создаете динамически. Ваш код не определяет для него идентификатор. С учетом сказанного, я бы рекомендовал сделать это так, как предложил Энтони. Я не вижу необходимости делать такого рода вещи. Если вы хотите иметь некоторую логику для отображения в определенных случаях, просто определите ее в своей разметке с помощью Visible="false" и сделайте ее видимой, когда вам нужно.