понедельник, 1 июля 2013 г.

Как разбить контент по страницам перед window.print

Допустим у вас есть страница, которая поддерживает печать с браузера через window.print() и на этой странице 1 график и одна таблица.
Для того чтоб график был на 1 странице а таблица на 2 нужно вставить между элементами элемент-разделитель со стилей style="page-break-after: always" :


content here
"
" " content here

Полная статья здесь

пятница, 31 мая 2013 г.

Как отрендерить ASP.NET MVC страницу в строку

Возможно, у вас была необходимость просто получить готовый HTML вашей страницы для отправки на почту или хранить как отчет и тд.

Как ?

public class ViewRenderer
    {
        public static string RenderView(string viewName, ControllerContext controllerContext, object model)
        {
            ViewEngineResult view = ViewEngines.Engines.FindView(controllerContext, viewName, null);
            controllerContext.Controller.ViewData.Model = model;

            using (var writer = new StringWriter())
            {
                ViewContext context = new ViewContext(
                    controllerContext,
                    view.View,
                    controllerContext.Controller.ViewData,
                    controllerContext.Controller.TempData,
                    writer);

                view.View.Render(context, writer);
                writer.Flush();

                return writer.ToString();
            }
        }
    }

Как пользоваться ?
Передаем название view, которое хотим отрендерить, ControllerContext у вас есть, это свойство в вашем контролере. Последний параметр - ваш класс модель с данными если нужно.

string html = ViewRenderer.RenderView("YTDClientReport", ControllerContext, YourViewModelInstance);

вторник, 21 мая 2013 г.

Как применить свой ttf шрифт в iOS приложении

Возможно вам приходилось или прийдется использовать нестандартные шрифты, которых нет в iOS.

Показываю как:
1. Добавляем шрифт в папку Supporting Files. В моем случае это AG_Friguer.ttf


2. Открываем plist файл и добавляем следующий ключ "Fonts provided by application". Добавляем элемент в этот ключ - название файла с расгирением шрифта, это важно, не имя шрифта, а так как называется файл, который вы добавили в Supporting Files.

3. Для того, чтобы использовать шрифт вам нужно знать его имя. Имя можно узнать через утилиту Font Book на маке. Запускаем ее, добавляем шрифт, выбираем Install Checked.


Далее смотрим имя шрифта. Как видим настоящее название AGFriquer. Именно это название мы будем использовать в себя в коде.


4. Использовать не сложно

        _topicTitleLabel.font = [UIFont fontWithName:@"AGFriquer" size:18.0f];

5. Результат


воскресенье, 12 мая 2013 г.

Как создать UIView из Nib файла

Если вы хотите сделать красивое приложение под iOS, то вам не обойтись без кастомных компонентов, которые наследуются от UIView или других элементов. Сами элементы отображения можно создавать самостоятельно в init'ах, а можно и заранее разметить их в Nib файле.

В первом случае не возникает трудностей, достаточно просто создать экземпляр вашего класса.
Для второго слачая с Nib файлом подготовил категорию. Я предоставляю 2 варианта, оба работаю, пользуйтесь тем, который больше нравится
//UIView+UIInitialization.h

#import 

@interface UIView (UIInitialization)

+ (UIView *) viewWithNibName:(NSString *)nibName owner:(NSObject *)owner;

@end



// UIView+UIInitialization.m Version 1

@implementation UIView (UIInitialization)

+ (UIView *) viewWithNibName:(NSString *)nibName owner:(NSObject *)owner
{   
    NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:nibName owner:owner options:NULL];
    NSEnumerator *nibEnumerator = [nibContents objectEnumerator];
    id customView = nil;
    NSObject* nibItem = nil;
    while ((nibItem = [nibEnumerator nextObject]) != nil) {
        if ([nibItem isKindOfClass:[self class]]) {
            customView = nibItem;
            break;
        }
    }
    return customView;
}

@end


// UIView+UIInitialization.m Version 2

@implementation UIView (UIInitialization)

+ (UIView *) viewWithNibName:(NSString *)nibName owner:(NSObject *)owner
{
    UINib *nib = [UINib nibWithNibName:nibName bundle:nil];
    NSArray *nibArray = [nib instantiateWithOwner:owner options:nil];
    id customView = [nibArray objectAtIndex: 0];  
    
    return customView;
}

@end



среда, 8 мая 2013 г.

Инструменты разработчика. Отправляем HTTP запросы

Для тестирования HTTP запросов я всегда пользовался утилитой Fiddler. В ней есть вкладка Composer. Если кто не знает, пора почитать.


Все вроде бы хорошо, но не всегда удобно, например окно TextWizard, форматирование и тп.
Сегодня разговор не о фидлере, а об альтернативной утлите Postman. Она идет как плагин к Chrome. 
Чем хорош
  • Удобный в использовании
  • Есть история запросов
  • Форматирует ответы JSON/XML
  • Есть горячие клавишы
  • Не нужно ставить

Пример


Пользуйтесь!

вторник, 7 мая 2013 г.

Как ускорить запуск ASP.NET MVC приложения

Бывают случаи, когда вам говорят "у меня долго открывается сайт" или тп. Вы заходите на сайт чтоб это проверить и все загружается быстро и вроде как проблемы нет.
Проблема обычно возникает у тех, кто заходит на сайт после того как он не использоваться некоторое долгое время.
Так работает IIS. Когда приложение не используется долгое время оно выгружается и память отдается активным приложениям. Ваш сайт перегружается когда вы вновь заходите на любую страницу.

Как решить:
1. Находим ваш сайт в IIS и выбираем Advanced Settings. Запоминаем Application Pool.


2. Идем в Application Pools. Выбираем наш и Advanced Settings для пула.
3. Ставим параметр Idle Time-out = 0. Теперь наш сайт не будет выгружаться из памяти.


4. Выбираем свой сервер затем Configuration Editor


5. В Configuration Editor в выпадающем списке ищем applicationPools.

6. Проверяем чтоб autoStart = True, startMode = AlwaysRunning. Это значит, что сайт будет стартовать когда запуститься IIS.


Все