динамическое изменение источника тега скрипта на стороне 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 в своем коде.