#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
вычисляются во время рендеринга.