Строковая переменная вне контекста для использования в выводе HTML

#c# #asp.net

#c# #asp.net

Вопрос:

Я пытаюсь понять, почему переменная myUrl находится вне контекста в примере ниже. Каков наилучший способ справиться с этой ситуацией? Есть ли альтернативы? Код на C # в ASP.NET страница.

 <% string myUrl = "http://www.website.com"; %>
<ul class="footerLinks">
    <li><a href="<%= myUrl %>/index.html">Home</a></li>
</ul>
  

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

1. «Вне контекста» означает «вне области видимости»? Что происходит в вашем случае? Ваш фрагмент кода работает для меня. Элемент списка «Home» действительно имеет href, указывающий на » website.com/index.html «. Я тестировал это на VWD Express 2010.

Ответ №1:

Это потому, что <%= она отображается перед компонентом сценария. Если вы зададите myUrl в исходном коде ( Page_Load или Init событии), то оно должно пройти на страницу так, как вы ожидаете. Очевидно, что также удалите объявление переменной в разметке.

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

1. Хотя это и решение, оно не объясняет, почему string объявление находится вне области видимости, когда оно вызывается в <li> теге.

2. Это потому, что myUrl переменная не была определена, когда средство визуализации интерпретирует <%= разметку. Если переменная была определена, но не инициализирована в исходном коде, то, я полагаю, возникло бы исключение NullReferenceException.

Ответ №2:

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

 public String myUrl
  

Затем вам нужно вызвать событие DataBind() method в Page_PreRenderComplete :

 protected void Page_PreRenderComplete(object sender, EventArgs e)
{
    DataBind();
}
  

Потому что <%= expressions вычисляются во время рендеринга.