• Как отправить форму на определенный ящик?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Вы на планируете на сервере организовать отправку почты, или же с клиента? В первом случае формируете адрес путем сопоставления со значением из $POST['mySpisok'], а во втором можно прибегнуть к javascript:
    <form action="" method="post">
    <select name="mySpisok" onchange="this.form.action='mailto:' + this.options[this.selectedIndex].value">
    ...
    </select>
    ...
    </form>

    Тут подразумевается, что в атрибутах value записаны соответствующие адреса, но можно и функцию сопоставления написать. При отключенном JavaScript работать не будет, естественно.
    Ответ написан
    Комментировать
  • Почему не работает простейшая функция на JS?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    document.querySelectorAll возвращает NodeList, а вы пытаетесь работать с ним, как с элементом. Это ж вам не jQuery! Так должно сработать:
    var elements = document.querySelectorAll('.show > ul > li');
    for (var i = 0; i < elements.length; ++i) {
        elements[i].style.display = (elements[i].style.display == 'none') ? 'block' : 'none';
    }
    Ответ написан
    1 комментарий
  • Как опубликовать .NET MVC приложение, разрабатываемое на Mac OS?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Вроде как пишут, что можно поставить старую Xamarin Studio 5.1.4, и в ней это еще есть. Надеюсь, это поможет.
    Опубликовать вручную не должно быть сложно: собираете проект, копируете ./bin, ./Views, *.config и каталоги со статикой в root-директорию сайта в IIS — этого должно быть достаточно.
    Ответ написан
    1 комментарий
  • MonoDevelop, как установить версию 5.9 на Ubuntu 14.04?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Предположу, что самый верный вариант здесь — собрать из исходников и Mono, и MonoDevelop (если мне не изменяет память, в репозитории 14.04 Mono довольно древний лежит).
    Сборка Mono описана здесь или здесь.
    Инструкция по установке MonoDevelop — например, здесь, думаю, и для 5.x это сработает. Вот есть еще одна инструкция для 14.04.
    От себя добавлю, что вместо make install лучше использовать checkinstall.
    Ответ написан
    Комментировать
  • Возможна ли полноценная разработка под .net на MonoDevelop?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Скажу так, успешные случаи существуют. Например, я разрабатываю все side-проекты под Mac OS в Xamarin Studio (аналог MonoDevelop). Но это все либо консольные, либо web-приложения. В частности, я делал сайт на MVC 4 + MySQL + Memcached и он успешно крутился потом под Ubuntu. Проблем с P/Invoke (обработка изображений через libfreeimage) тоже не заметил. Работал и с другими БД — MongoDB и Postgres, тоже без нареканий.
    На сегодняшний день есть трудности с хорошим web-сервером под Mono (у меня был HyperFastCGI), но на новой платформе с OWIN должно быть лучше — уже есть быстрые реализации.
    В Mono 4.0 сейчас заменяют собственные реализации в BCL на майкрософтовские, что дает основания ожидать идентичного поведения.
    Что до самой среды разработки, VS + Resharper, конечно, мощнее, чем MonoDevelop. И расширений под студию куда больше, и дебаггер удобнее и функциональнее. Но сам процесс написания кода в MonoDevelop лично мне нравится.
    vNext я пока глубоко не копал (за что мне стыдно), но выглядит он многообещающе, опять же, для консоли и web. Насколько я понимаю, WPF портировать никто не собирается.
    Ответ написан
    1 комментарий
  • Парсер сайта на Mono. С чего начать??

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Mono? Это кроссплатформенный аналог (почти) .NET Framework, только и всего. В принципе, если вы делаете простое консольное приложение без завязки на какие-то ресурсы, специфичные для Windows, чаще всего оно, будучи собрано в Visual Studio, будет и под Mono работать, и наоборот.
    Наличие готовой библиотеки сильно зависит от того, какие именно данные вы хотите доставать. Для разбора HTML порекомендую пакет SGMLReader. Есть еще HTML Agility Pack, как вариант.
    Для работы с HTTP есть средства самой платформы — например, HttpClient или более старый HttpWebRequest.
    Ответ написан
    8 комментариев
  • Можно ли использовать Model для взаимодействия с View вместо ViewModel?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Лично я сторонник такого разделения в силу практики Separation Of Concerns.
    Я даже разделяю модель, модель представления и модель запроса (данные, пришедшие от пользователя).
    Я люблю, когда объекты домена представляют собой POCO-классы, как правило, неизменяемые — с readonly-полями и валидацией всего в конструкторе. Для получения данных от пользователя я использую отдельные классы с атрибутами валидации, автосвойствами и автоматическим связыванием. Если все хорошо, я просто делаю маппинг в доменный объект и сохранение.
    Модель представления нужна, если она комбинирует несколько доменных объектов, содержит данные, нужные только представлению, и так далее. В простых случаях возможно передавать во View сам доменный объект.
    Вышесказанное имеет смысл при разработке серьезных приложений. Для простых сайтов на коленке лучше разделение не использовать, или использовать его только там, где это действительно нужно. Минусы заключаются, собственно, в дополнительном количестве кода, который приходится писать и поддерживать. Плюсы — в четком разграничении ответственности и дисциплине.
    Ответ написан
    4 комментария
  • Правильно ли Entity Framework создал модель?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Если у вас во вспомогательной таблице нет иных столбцов, кроме ключей родителя и потомка, то модель сгенерирована правильно.
    Ответ написан
    Комментировать
  • Как в entity framework загрузить и обработать файлы?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Сделайте в модели свойство типа byte[], а таблице — столбец типа varbinary(max) или image. Вот здесь, например, есть ответ на подобный вопрос.
    Ответ написан
    Комментировать
  • Как называется архитектура с несколькими серверами и одной базой?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    В терминологии Microsoft развертывание web-приложения на нескольких серверах именуется Web Farm. Даже framework для них сделали. Про конфигурацию еще здесь можно почитать, ну и вообще в Google по запросу «configure web farm».
    Про базу данных — MongoDB замечательно масштабируется по горизонтали, начать можно с репликации, это даст масштабирование на чтение, при необходимости организовать распределенный кластер.
    Ответ написан
    Комментировать
  • Узнать URL страницы?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Ох, уж эти Web Forms!
    Думаю, для понимания механизма достаточно будет открыть вкладку Network dev-консоли Chrome, понажимать разные кнопки и посмотреть, какие запросы отправляются.
    За выполнение действий по postback отвечают поля __EVENTTARGET и __EVENTARGUMENT POST-запроса. Сценарий рисуется примерно такой:
    1. Отправляем POST-запрос к странице с аргументами для установки размера страницы в 100 записей (нужные аргументы можно взять из консоли, взять их из страницы, навскидку, непросто).
    2. Парсим email'ы.
    3. Ищем ссылку на следующую страницу. Нам интересны ссылки (a), расположенные внутри блока с классом .rgNumPart. Пейджер отображается дважды, поэтому берем только первый блок.
    4. Находим в нем элемент a, следующий за a.rgCurrentPage. Если такого нет, мы просмотрели список до конца.
    5. Из атрибута href ссылки регуляркой достаем идентификатор вроде ctl00$MainContent$RadGrid1$ctl00$ctl03$ctl01$ctl03. Это будет новый __EVENTTARGET.
    6. Отправляем новый POST-запрос с новыми аргументами, переходим к шагу 2.
    Ответ написан
  • Как правильно оформить регулярку в nginx?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Уточните, у вас раньше был URL /video.php?id=123, а в новой CMS /video/player/123, и вам нужно сделать перенаправление со старого на новый?
    Тогда попробуйте
    location = /video.php {
           rewrite ^(.*)$ "/video/player/$arg_id?" permanent;
    }

    Опционально можно добавить проверку, и выполнять переадресацию, только если $arg_id передан. В текущем виде он просто отправит на /video/player.

    Если убрать '?' после $arg_id, параметры будут сохранены, и получится /video/player/123?id=123.
    Ответ написан
  • Постраничный вывод (пагинация) ASР.NET MVC?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Похоже, проблема в том, что метод, принимающий аргументы фильтра, работает только по POST, а пейджер реализован в виде ссылок, которые, очевидно, делают GET запрос (и вы попадаете в первый метод).
    Думаю, вы могли бы сделать один GET-метод, Index(FilterAutoValue filter, int page = 1) и, если критерии поиска не заданы, просто возвращать из dataFilter.FiltrationAuto запрос, отображающий все.
    Ответ написан
    1 комментарий
  • Как спроектировать архитектуру ASP.NET MVC приложения в данном случае?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Не совсем понял суть вопроса.
    Если работа с данными в вашем проекте вынесена в отдельную библиотеку и MVC-приложение использует эту библиотеку, ничто не мешает рядом с MVC сделать еще одно приложение (console или service), которое будет работать независимо, используя те же библиотеки. Консольное приложение можно запускать через scheduler ОС, если сервис — тут вы сами решаете, когда и что нужно делать.
    Если код работы с базой (контексты, модели, да хоть бы ADO.NET) у вас в MVC, то стоит сделать рефакторинг.
    Для коммуникации между приложениями MVC и не-MVC можно сделать специальный endpoint (в случае console -> MVC), или event queue (для console <-> MVC), но это при необходимости.
    Ответ написан
    2 комментария
  • Как фильтровать содержимое div editable при получении?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Я предложил бы использовать соответствующий парсер. Для PHP есть Jevix, например, хоть и не идеален.
    Ответ написан
    Комментировать
  • Нарушение порядка запросов страницы, баг браузера или сервера?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    А на мой взгляд, тут банальное race condition. Когда мы зажимаем F5, несколько запросов теоретически могут одновременно попасть в конвейер обработки.
    Попробуйте поместить указанные операции в критическую секцию:
    lock (Session.SyncRoot) {
        if (Session["a"] == null)
            Session["a"] = a;
        else { 
            Session["a"] = (int)Session["a"] + 1;
            a = (int)Session["a"];
        }
    }


    И я бы сделал так, а то у вас три операции чтения, хотя нужна только одна:
    var storedValue = Session["a"];
    a = (storedValue == null) ? a : (int)storedValue + 1;
    Session["a"] = a;
    Ответ написан
    Комментировать
  • ASP.Net zero down time deployment, как лучше и дешевле?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Есть решение с использованием модуля Application Request Routing, описанное на serverfault, правда, лично я его не пробовал. Можно попробовать начать с этого, а если будет работать ненадежно или в случае роста нагрузки — тогда уже ставить nginx.
    Ответ написан
    Комментировать
  • Как написать регулярные выражения для rewrite nginx?

    SergeyRodyushkin
    @SergeyRodyushkin
    .NET Developer
    Второй, навскидку, можно сделать так:
    rewrite ^(.*/)?([^\.]*[^/])$ $1$2/ permanent;
    Ответ написан
    Комментировать