Метод расширение для поиска контролов внутри другого контрола.
Панда WTF !?
ect0plasm

    public static List<T> FindControlsByPrefix<T>(this System.Web.UI.Control cntl, string prefix)

    {

        List<T> ret = new List<T>();

 

        foreach (System.Web.UI.Control cn in cntl.Controls)

        {

            if ((null != cn.ID) && (-1 < cn.ID.IndexOf(prefix)) && (typeof(T) == cn.GetType()))

            {

                ret.Add((T)Convert.ChangeType(cn, typeof(T)));

            }

        }

 

        return ret;

    }


Компонент MSCaptcha: генерирование каптчи в ASP.NET-сайте
Панда WTF !?
ect0plasm
При регистрации на различных ресурсах часто предусмотрена защита от автоматической регистрации — вас просят ввести цифры и буквы с картинки. Такой тест называется CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart).
Я расскажу про бесплатный компонент MSCaptcha, который позволит вставить каптчу в Ваш ASP.NET сайт.

Инструкция по установке:


1. Скачайте архив и разархивируйте его.
2. Скопируйте файлы MSCaptcha.dll и MSCaptcha.xml в директорию /bin Вашего ASP.NET-приложения.
3. Добавьте MSCaptcha.dll в References Вашего приложения.
4. Модифицируйте файл web.config в секцию <httphandlers> строчку:
      <add verb="GET" path="CaptchaImage.axd" type="MSCaptcha.CaptchaImageHandler, MSCaptcha"/>
5. Добавьте компонент MSCaptcha в Visual Studio Toolbox («Tools»->«Choose Toolbox Items...»).

Пример использования


1. Добавьте строчку в Ваш .aspx-файл:
      <%@ Register Assembly="MSCaptcha" Namespace="MSCaptcha" TagPrefix="msCaptcha" %>
2. В месте, где хотите разместить каптчу вставьте код (в этой строчке добавляется компонент-каптча с именем myCaptcha):
<msCaptcha:CaptchaControl ID="myCaptcha" runat="server" CaptchaBackgroundNoise="none" CaptchaLength="5" CaptchaHeight="60" CaptchaWidth="200" CaptchaLineNoise="None" CaptchaMinTimeout="5" CaptchaMaxTimeout="240" />

3. Разместите TextBox для ввода каптчи (например textBoxCaptcha). Далее Вы можете легко проверить верно ли пользователь ввёл надпись (пример на C#):
myCaptcha.ValidateCaptcha(textBoxCaptcha.Text);
if (!myCaptcha.UserValidated)
{
 // Сообщите пользователю об ошибке
 return;
}


Вы получите примерно такую каптчу:

Особенности компонента:


  • Возможность установки любого размера изображения
  • Возможность установить множество используемых символов и их количество
  • Возможность установить разнообразный шум на заднем фоне и шум в виде линий
  • Возможность установить период, в течении которого компонент будет активен
  • Набор различных шрифтов для Вашей каптчи.
  • Каптча сама перезагружается при любом Ajax-запросе.

Параметры:


  • CaptchaBackgroundNoise — Количество шума, который Вы хотите добавить на изображение. Шум нужен для того, что затруднить распознавание каптчи специальными программами. Помните, что при большом количестве шума обычные пользователи также могут испытывать затруднение в распознавании картинки. Поэтому рекомендуется поставить низкий уровень шума и повышать его, только если Вы заметили присутствие ботов на Вашем сайте. Возможные значения параметра: "none", "low", "medium", "high", "extreme". Значение по умолчанию: low.
  • CaptchaLength — Количество символов, которое будет содержать каптча. Значение по умолчанию: 5.
  • CaptchaHeight — Высота изображения. Минимальное значение — 31. Значение по умолчанию: 50.
  • CaptchaWidth — Ширина изображения. Минимальное значение — 61. Значение по умолчанию: 180.
  • CaptchaLineNoise — Добавление линий для затруднения распознавания изображения. Возможные значения параметра: "none", "low", "medium", "high", "extreme". Значение по умолчанию: none.
  • CaptchaMaximeout — Время в секундах, через которое каптча станет недействительной. Значение по умолчанию: 90.
  • CaptchaMinTimeout — Минимальное время в секундах существования каптчи, необходимое для активации каптчи. Это ещё одна защита от частой автоматической регистрации. Значение по умолчанию: 2.
  • CaptchaChars — Строка, которая определяет множество символов, используемых при генерации каптчи. Значение по умолчанию: "ABCDEFGHJKLMNPQRSTUVWXYZ23456789". Рекомендуется не использовать символы , O, 1, I, 8, B, т.к. наличие разных шрифтов может запутать пользователей.
  • CaptchaFont — Шрифт для каптчи. Если параметр не задан, то шрифт будет выбран случайным образом.
  • BackColor — Цвет заднего фона изображения.
  • FontColor — Цвет надписи.
  • LineColor — Цвет шума в виде линий
  • NoiseColor — Цвет шума на заднем фоне
  • CacheStrategy — Определяет где хранятся данные каптчи. Возможные значения: HttpRuntime (быстро, но используется локальный сервер), Session (более портативно через веб-формы). Значение по умолчанию: HttpRuntime.
  • ErrorMessage — Сообщение, которое появляется, если каптча была введена не верно. Значение по умолчанию: "The text you typed does not match the text in the image.".


Ссылки


Официальный сайт компонента MSCaptcha
Архив с компонентом
Статья о каптчах на Wikipedia.org

Оригинал статьи тут

English Exceptions в .NET
Панда WTF !?
ect0plasm
Как меня раздражает, когда в объяснении исключения идет локализованный перевод. Ошибку загуглить становится гораздо сложнее.

Но, как оказалось, можно загуглить как обрубить локализацию исключений:

Thread.CurrentThread.CurrentUICulture = new CultureInfo( "en-US" );

Все, исключения теперь английские.

Оригинал тут

Парочка интересных примеров кода.
Панда WTF !?
ect0plasm
Получение HTML разметки элемента управления.

Отложенная загрузка фрагментов страницы.

Вызов asp.net веб сервисов с помощью jquery
Панда WTF !?
ect0plasm

Все просто.


function
SetSimpleTextEditor2(pageName, id) {

    $.ajax({

        type: "POST",

        url: "WSMega.asmx/GetSimpleText",

        data: "{'pageName':'" + pageName + "','id':'" + id + "'}",

        contentType: "application/json; charset=utf-8",

        dataType: "json",

        success: function (msg) {

            if (null != msg.d.Name)

                $('#ctl00_ucSimpleTextEditor_txtName').val(msg.d.Name);

 

            if (null != msg.d.Keywords)

                $('#ctl00_ucSimpleTextEditor_txtKeywords').val(msg.d.Keywords);

 

            if (null != msg.d.Description)

                $('#ctl00_ucSimpleTextEditor_txtDescription').val(msg.d.Description);

 

            if (null != msg.d.Body)

                CKEDITOR.instances.ctl00_ucSimpleTextEditor_ckeText.setData(msg.d.Body);

 

            $('#ctl00_ucSimpleTextEditor_hfElementID').val(id);

            $('#SimpleTextEditor').fadeIn('slow');

        }

    });

}

 


Sockets
Панда WTF !?
ect0plasm
Нашел хорошую статейку по работе с сокетами.
Get Closer to the Wire with High-Performance Sockets in .NET
http://msdn.microsoft.com/en-us/magazine/cc300760.aspx

Валидация поля для целых
Панда WTF !?
ect0plasm

<asp:CompareValidator ID="CompareValidator1"

    runat="server" ErrorMessage="CompareValidator" Operator="DataTypeCheck"

    Type="Integer" Display="Dynamic" ControlToValidate="txtQuantity"></asp:CompareValidator>


или можно сделать так


$(function () {

        $('input.TxtBoxInt').keyup(function () {

            if (this.value.match(/[^0-9]/g)) {

                this.value = this.value.replace(/[^0-9]/g, '');

            }

        });

    });


Просто валидация поля с датой.
Панда WTF !?
ect0plasm
<asp:CompareValidator ID="cvalTextBoxStartDate" runat="server" ControlToValidate="TextBoxStartDate" ErrorMessage="Не верный формат даты. Введите верно dd.MM.yyyy." Operator="DataTypeCheck" Type="Date" EnableClientScript="False"></asp:CompareValidator>

Форматированная дата Просто
Панда WTF !?
ect0plasm
Иногда нужно вывести дату в нужном формате. Вот простой пример.

<%# Eval("StartDate", "{0:dd.MM.yyyy}")%>

 

Более подробное описание параметров форматирования строки тут http://blog.stevex.net/index.php/string-formatting-in-csharp/


Получаем возраст по дате рождения
Панда WTF !?
ect0plasm
 

public static int BirthdayDateToAge(DateTime birthdayDate)

{

int age = DateTime.Now.Year - birthdayDate.Year;

DateTime someDate = DateTime.Now.AddYears(-age);

      if (someDate < birthdayDate)

      {

            age--;

      }

 

return age;

}


?

Log in

No account? Create an account