Если программа не будет работать без файлов, кажется, что разделение их в отдельный repo является плохой идеей. У нас есть большие наборы тестов, что мы врываемся в отдельный repo, но это - действительно "вспомогательные" файлы.
Однако Вы можете управлять файлами в отдельном repo и затем использовать git-submodule
для получения по запросу их в проект нормальным способом. Так, у Вас все еще была бы полная история всего Вашего источника, но насколько я понимаю у Вас только будет один соответствующий пересмотр Вашего подмодуля изображений. git-submodule
средство должно помочь Вам сохранить правильную версию кода в соответствии с правильной версией изображений.
Вот польза введение в подмодули из Книги Мерзавца.
Я предполагаю, что вы захотите «отменить регистрацию» скрипта (который уже был зарегистрирован) при некоторых условиях, например:
Page.ClientScript.RegisterStartupScript(this.GetType(), "KeyName", "alert('changed my mind')", true);
...
if(condition)
Page.ClientScript.UnregisterStartupScript(this.GetType(), "KeyName", "alert('changed my mind')", true);
Почему это просто нельзя изменить на:
if(!condition)
Page.ClientScript.RegisterStartupScript(this.GetType(), "KeyName", "alert('changed my mind')", true);
На самом деле это хуже, чем вы думаете - «просто перерегистрировать и ничего не делать» тоже не вариант. Метод register проверяет, зарегистрирован ли уже сценарий с этим ключом, и ничего не делает, если это так. После того, как вы вызовете RegisterStartupScript
, ничто из того, что вы можете сделать, не остановит рендеринг этого сценария.
Что касается того, почему Microsoft сделала это, я предполагаю, что возможность изменения или удаления зарегистрированных сценариев была просто забыта, когда RegisterStartupScript
был впервые разработан. Выбранный дизайн сделал нетривиальным вернуться и создать метод отмены регистрации, поэтому теперь для этого потребуется веская причина.
Когда вы регистрируете сценарий, он сохраняется в двух местах в ClientScriptManager. ListDictionary позволяет проверять, зарегистрирован ли уже сценарий, а ArrayList сохраняет фактические сценарии по мере их отображения. Я предполагаю, что ArrayList используется для обеспечения того, чтобы скрипты отображались в том порядке, в котором они были зарегистрированы, но это также означает, что вы не можете определить, какая строка в ArrayList принадлежит какому ключу.
ужасно сложно оснастить ваш собственный класс страницы методами для MaybeAddStartupScript (ключ, сценарий)
и ChangedMyMindAboutThatStartupScript (ключ)
. Сохраните ключи и скрипты в своем собственном словаре, а затем в PreRender зарегистрируйте любые скрипты, которые дошли до этого места. Хотя, конечно, неприятно делать это самому.
ужасно сложно оснастить свой собственный класс страницы методами для MaybeAddStartupScript (ключ, сценарий)
и ChangedMyMindAboutThatStartupScript (ключ)
. Сохраните ключи и скрипты в своем собственном словаре, а затем в PreRender зарегистрируйте любые скрипты, которые дошли до этого места. Хотя, конечно, неприятно делать это самому.
ужасно сложно оснастить свой собственный класс страницы методами для MaybeAddStartupScript (ключ, сценарий)
и ChangedMyMindAboutThatStartupScript (ключ)
. Сохраните ключи и скрипты в своем собственном словаре, а затем в PreRender зарегистрируйте любые скрипты, которые дошли до этого места. Хотя, конечно, неприятно делать это самому.
MaybeAddStartupScript (ключ, сценарий)
и ChangedMyMindAboutThatStartupScript (ключ)
. Сохраните ключи и скрипты в своем собственном словаре, а затем в PreRender зарегистрируйте любые скрипты, которые дошли до этого места. Хотя, конечно, неприятно делать это самому. Ужасно сложно оснастить ваш собственный класс страницы методами для MaybeAddStartupScript (ключ, сценарий)
и ChangedMyMindAboutThatStartupScript (ключ)
. Сохраните ключи и скрипты в своем собственном словаре, а затем в PreRender зарегистрируйте любые скрипты, которые дошли до этого места. Хотя, конечно, неприятно делать это самому.