динамическое изменение источника тега скрипта на стороне C#
Как я могу динамически изменить <script>
src
атрибут из Page_Load
?
Когда я говорю динамический, я на самом деле имею в виду, что это одна и та же Страница Default.aspx
, но каждое обновление ссылается на другой источник js
. Логика, лежащая в основе выбора файла js
, не имеет никакого значения, просто механизм его установки.
Я попробовал:
<script id="script1" runat="server" language="javascript" src="a.js" type="text/javascript"></script>
Но script1
недоступно на стороне .cs
. Я знаю, что могу изменить его на стороне .aspx
, используя теги <% %>
, но я не хочу чтобы моя логика была встроена таким образом в мою .aspx
. Должен быть способ сделать это на стороне .cs
в Page_Load
?
4 ответа:
В обработчике загрузки страницы у вас может быть что-то вроде этого
string csurl = null; string csname = "myscript"; if (condition) { csurl = "~/a.js"; } else { csurl = "~/b.js"; } if (!Page.ClientScript.IsClientScriptIncludeRegistered(cstype, csname)) { Page.ClientScript.RegisterClientScriptInclude( this.GetType(), csname, ResolveClientUrl(csurl)); }
Или
string csurl = null; if (condition) { csurl = "a.js"; } else { csurl = "b.js"; } Literal script = new Literal(); script.Text = string.Format( @"<script src=""{0}"" type=""text/javascript""></script>",csurl); Page.Header.Controls.Add(script);
Есть несколько способов сделать это. Один из подходов заключается в создании метода
protected
илиpublic
в вашем codebehind, который возвращаетstring
, который возвращает правильный URL-адрес для вашего Javascript на основе ваших критериев. Затем просто вызовите этот метод из своей разметки, например:<script language="javascript" src="<%=GetJavaScriptUrl() %>" type="text/javascript"></script>
В этом примере предполагается, что вы вызываете метод в своем codebehind
GetJavaScriptUrl
.
К сожалению, я не думаю, что у вас есть большой выбор, кроме как использовать
<%= %>
.Если кто-то не знает другого (если это так, пожалуйста, прокомментируйте, и я изменю), использование атрибута
runat="server"
в блоке<script>
будет означать, что блок будет выполнен на стороне сервера.Обновить
Извините, я немного неправильно понял ваш вопрос.Я думал, вы говорите, что не хотите использовать
<% %>
для установки атрибутаsrc
блока<script>
. Я сейчас поймите, вы имели в виду создание отдельных блоков<script>
для каждого файла, отображаемых через логические блоки<%If x Then%><%Else%><%End If%>
.Как уже заявили другие (и я намекнул на это), вы можете установить атрибут
src
с помощью<%=GetSrcPath()%>
и иметь логику в методе GetSrcPath в своем коде.