Pull to refresh
18
Дмитрий Команов@dkomanov

Разработчик

3
Subscribers
Send message
Не слышал об этом (слышал об обратном). Можно ссылочку или объяснение по-подробнее?
В общем, надо возвращать просто String.Empty, если список null или пустой :)

P.S. А метод AppendFormat всё-таки медленее двух Append.
Обрезалось...

if (list == null || list.Count
Не, если уж тут о правильности кода заговорили...

Лучше переписать начало метода:


if (list == null || list.Count
Такой подход реализован, например в Microsoft ASP.NET AJAX. Там у элемента управления ScriptManager есть ScriptManagerProxy, с помощью которого можно устанавливать декларативно свойства у ScriptManager на страницах и пользовательских элементах управления (если, например, сам ScriptManager объявлен в Master Page).

P.S. А вообще, я сам все скрипты содержу в одном файле (типа "оптимизация"), покуда это возможно по объёмам :)
Ваша правда, MapPath - это я сгоряча.

Лучше, конечно было сделать так:


public sealed class ScriptIncluder : Control
{
private string _path;

public string Path
{
get { return _path; }
set
{
_path = ResolveClientUrl(value);
if (!Page.ClientScript.IsClientScriptIncludeRegistered(Page.GetType(), _path))
Page.ClientScript.RegisterClientScriptInclude(Page.GetType(), _path, _path);
}
}
}


Мне кажется, что суть в том, что надо стремиться к максимуму декларативности, поэтому я и решил написать по-быстому соответствующий элемент управления.
Не знаю насчёт 1.0, но в 1.1 подобные методы были реализованы прямо в классе Page. А во втором фреймворке эти методы инкапсулировали в классе ClientScriptManager.
Ещё один вариант - написать свой элемент управления, чтобы задавать скрипты в декларативном виде. Что-то такое:


public sealed class ScriptIncluder : Control
{
private Dictionary _scripts
{
get
{
return (Dictionary )(Context.Items[typeof(ScriptIncluder)] ?? (Context.Items[typeof(ScriptIncluder)] = new Dictionary ()));
}
}

private string _path;

public string Path
{
get { return _path; }
set
{
_path = Page.Server.MapPath(value);
Dictionary dict = _scripts;
if (!dict.ContainsKey(_path))
dict.Add(_path, false);
}
}

protected override void Render(HtmlTextWriter writer)
{
if (String.IsNullOrEmpty(_path))
return;

Dictionary dict = _scripts;
bool alreadyRendered = dict[_path];
if (!alreadyRendered)
{
writer.Write(@" ", _path);
dict[_path] = true;
}
}
}


Использование:

<mycontrols:ScriptIncluder runat="server" Path="~/js/my_script.js" />

Information

Rating
Does not participate
Location
Рамат-Ган, Тель-Авив, Израиль
Works in
Date of birth
Registered
Activity