Pull to refresh
674
0
Владимир Юнев @XaocCPS

Chief Architect

Send message
Не понял вопрос, не совсем понял зачем делать еще контрол. На всякий случай объясню ситуацию: есть контрол, этакий черный ящик. Он зависит от внешнего файла js. То есть разработчик контрола должен быть уверен, что когда другой человек поместит контрол на страницу, то связка с js произойдет. Первый "плохой способ" тупо прописывал ссылку в теле контрола и на этом мысль заканчивалась. Второй способ - это грамотная проверка наличия ссылки в head родительской страницы и добавление ее в случае отсутствия. Больше делать ничего не нужно будет.
Решение можно уменьшить на две строчки :) отказавшись от привязки к типу и обращаясь напрямую к Page.ClientScript.
Если серьезно, то лично у меня претензий к реализации нет. По моему проще и не сделаешь. Интересен другой факт. Подобного механизма в .net framework 1.0 просто не было. Похоже, что введение ClientScriptManager и множества прочих элементов касающихся клиентских скриптов, было произведено под давлением программистов, которым не смотря на всю силу asp.net все-таки нужны скрипты.
Я не знаю что и куда вы смотрите. Можете мне снижать карму, но вот реальный пример того, что я демонстрировал выше:
имеем страницу с двумя пользовательскими элементами, которые написаны "плохо" -

<form id="form1" runat="server">
<uc1:WebUserControl ID="WebUserControl1" runat="server" />
<br />
<br />
<uc1:WebUserControl ID="WebUserControl2" runat="server" />
</form>

имеем на выходе следующий html-текст:

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
<form name="form1" method="post" action="CtrlTest.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTEzMzI4MzgwMGRkt+GZS8kLa3l7NAdBn5i0fy5gG2A=" />
</div>


<script src="../js/some_js.js" type="text/javascript"></script>
<input type="submit" name="WebUserControl1$Button1" value="Button" onclick="OnClick();" id="WebUserControl1_Button1" />
<br />
<br />

<script src="../js/some_js.js" type="text/javascript"></script>
<input type="submit" name="WebUserControl2$Button1" value="Button" onclick="OnClick();" id="WebUserControl2_Button1" />

<div>

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwKh+eS/BgKMgeP0CQL93ZHkAejhGwbwXP0EMYcwQT7Qge5qGAXz" />
</div></form>
</body>
</html>

Нетрудно заметить что объявление скрипта задваивается. Можете сами проверить.
У меня кармы < 5 пока. Вроде бы я не могу постить в коллективные блоги. Или ошибаюсь?
Читайте внимательнее текст, дублирование произойдет, когда на странице элемент управления используется несколько раз.
Хорошая статья.
Хотел бы обратить внимание по этой теме на еще один вариант (более тяжелый, но и более полный) решения проблемы:

http://blogs.msdn.com/jmstall/pages/samp…

Здесь тоже самое реализовано без импорта DLL.
Кстати, по теме: в студии есть прикольная фича "Sort and Remove", я ей пользуюсь, когда страница приобретает законченные очертания.
А в какой среде вы разбираетесь? 2008 студия при указании .net 3.5 сама создает проект с подключенным неймспейсом System.Linq.
На сегодня, пожалуй, asp.net в связке с javascript/css. Скоро появится MVC pattern, Data Entity Framework, .Net Data Services и станет еще интереснее.
Кстати, предлагаю вам продолжить и заделать материал про агрегацию RSS средствами LINQ to XML. С LINQ это вообще пустяковое дело.
Не соглашусь насчет того, что var в данном контексте читается лучше. Считаю, что указание конкретного типа в foreach - это признак хороший тона хотя бы потому, что тогда контекст итераций будет самодостаточным. Разбирая в дальнейшем тело цикла не нужно будет искать определение tracks. Особенно это актуально для тяжелых циклов. Это мое личное мнение, дело вкуса. Я сам стараюсь использовать var в основном для промежуточного буфера. Например, когда LINQ-строка уже слишком длинная, но необходимо все же произвести еще какие-то действия типа ToList или Remove.
Мне кажется существует большое количество .net разработчиков, которые читают хабр, но не понимая ничего в php, python, apache и ubuntu c linux, темах которые главенствуют на сайте, молчат в тряпочку. Конкретный пример - я. Хабр читаю, что-то около полугода. Решил зарегистрироваться только сегодня, когда увидел новый блог ".NET". Теперь, когда накоплю достаточно кармы, намерен пописывать опусы про интересные вещи в .net.
Отличное описание! Одно замечание, почему бы в примере удаления не поступить проще:

var tracks2Del = doc.Root.Descendants("track").Where(t => t.Element("artist").Value == "DMX");
tracks2Del.Remove();

Так нагляднее и с идеологией LINQ больше согласуется.
По сиквелсерверу подробно описано здесь:
http://www.microsoft.com/sql/prodinfo/features/compare-features.mspx
12 ...
261

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity