вторник, 30 ноября 2010 г.

Сдал экзамен

Как-то раньше никогда не задумывался о сдаче сертификационных экзаменов. 2 года назад сдал экзамен по CRM 4:
Но в последнее время решил проверить знания путем сдачи экзаменов. Первый на очереди был 70-515: Web Applications Development with Microsoft .NET Framework 4. Вчера я его сдал, набрав 1000 баллов из 1000. Самое интересное, что как ответить на некоторые вопросы я не знал, т.к. не было практики работы с тем, что спрашивали, но ответ как-то угадал, используя логические умозаключения :) В общем, УРА!

вторник, 16 ноября 2010 г.

ASP.Net Ajax валидаторы

В текущем проекте вылезла следующая проблема: есть форма, на ней располагаются контролы, к некоторым контролам привязаны валидаторы (MaskedEditValidator, RegularExpressionValidator, MaskedEditExtender). Так же есть кнопка при нажатии, на которую с помощью ModalPopupExtender показывается всплывающее окно. При первоначальной загрузке формы всё отображается и работает как надо. Но при нажатии на кнопку, осуществляющую PostBack, все ломается: при нажатии на кнопку не показывается всплывающее окно, не работают валидаторы (на клиенте не отображается способ валидации).
Так в чем же проблема?

Решение:
Полазив по инете и поискав возможные решения, я толком ничего не нашел. Кроме разве что вот этой статьи, которая на первый взгляд малость касается моей проблемы. К тому же стоит отдать должное ИЕ8, который помог найти проблему, почему-то в FF ошибки скриптов не отображаются на панели, хотя стоит FireBug. Может не настроил?
Когда загрузил страницу в ИЕ, то увидел ошибку скрипта:
Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
Timestamp: Mon, 15 Nov 2010 09:18:22 UTC

Message: Sys.ArgumentUndefinedException: Value cannot be undefined.
Parameter name: id
Line: 5141
Char: 12
Code: 0
URI: http://localhost:55/ScriptResource.axd?d=V_NtTRPEMDO1ptCgFAQjVZF...


Поотлаживал я javascript, но ничего существенного не нашел, кроме того, что не находятся нужные  идентификаторы. Возвращаясь к статье, которую я привел выше, я увидел, что рекомендуют поставить флаг ClearMaskOnLostFocus="false". Поставил и заработало!!! :)
Проблема заключалась в том, что на странице были поля обязательные для заполнения и на них были натравлены валидаторы. Без установки ClearMaskOnLostFocus="false" у них "срывало голову" (почему не выяснил), т.к. после postback не могли найти нужный контрол о чем красноречиво говорит javascpit-ошибка. Т.е. события валидаторов срабатывали, но реакции не последовало, т.к. ИД нужных объектов не были проинициализированы. Установка этого флага решила проблемы.

пятница, 12 ноября 2010 г.

LINQ Extensions

Сегодня понадобился ForEach для IEnumerable коллекции. Начал искать способы решения, но коллега помог и дал ссылку на статью LINQ, или “чего не хватает для счастья?”, в которой была ссылка на интересную библиотеку MoreLINQ, в которой есть еще больше интересных методов для реализации выражений.

Обновление 01.02.2012:
Вышел NuGet-пакет.
Так же обратить внимание на две другие библиотеки авторства Джона Скита – MiscUtils и NodaTime (NuGet Package). В его блоге можно почитать много интересного на тему того, чем плохи для этих целей стандартные классы .Net и какие подводные грабли поджидают разработчика, серьезно работающего со временем. Например перевод: Что же всё-таки не так со структурой DateTime? 

Шаблоны проектирования

Очень хороший цикл статей находится по адресу

Перегрузка операторов

Ссылка: http://sivan.22host.ru/?p=8

Неявное преобразование
public static implicit operator Int32(MyIntStruct instance)
{
  return instance.m_IntValue;
}

MyIntStringStruct myIntStringStructInstance = "Hello World";

Console.WriteLine(myIntStringStructInstance);

Явное преобразование
public static explicit operator string(MyIntStringStruct instance)
{
  return instance.m_StringValue;
}

MyIntStringStruct myIntStringStructInstance = "Hello World";
Console.WriteLine((string)myIntStringStructInstance);

Перегрузка операторов
public static MySize operator +(MySize mySizeA, MySize mySizeB)
{
  return new MySize(
    mySizeA.m_Width + mySizeB.m_Width,
    mySizeA.m_Height + mySizeB.m_Height);
}

Еще статьи

2leep.com