• Как построить Single Page Application на ASP.NET?

    ilyatrifonov
    @ilyatrifonov Автор вопроса
    В общем использовать ASP.NET MVC для SPA приложений - так себе идея. Самая идеальная связка (в окружении ASP.NET) - ASP.NET Core Web API + отдельный Angular/React проект, который умеет собираться в папку wwwroot Web API проекта для продакшена. Конкретно такой вариант реализации обсуждался вот здесь. Вкратце: создаете Web API проект (где держите запросы, которые будут отдавать или записывать нужные данные) и создаете Angular/React/ЛюбойДругойФреймворк проект, который полностью отвечает за веб-интерфейс; настраиваете прокси для запросов (чтобы дергать API методы с отдельного проекта во время разработки); учите ваш сборщик собирать проект в папку wwwroot; профит:). В итоге имеем два проекта, которые во время разработки общаются с двух разных портов, а в продакшене один проект, который открывает страничку index.html со всей логикой из wwwroot.
    Ответ написан
    Комментировать
  • Разделить Web API и Angular 4?

    ilyatrifonov
    @ilyatrifonov Автор вопроса
    Для тестового проекта без специальных настроек безопасности решил двумя строчками кода:
    5a55e3ef3861a664387227.png

    Использовал эту статью. Естественно для реального проекта нужны более детальные настройки, но для обучения (чтобы работало) пойдет. Упор пока делаю на изучение Angular и бэк нужно просто для тестовых данных.
    Ответ написан
    Комментировать
  • Как сделать подписки и подписчиков?

    Единственное пока, что приходит в голову это таблица маппинга пользователей. В таблице следующие колонки: UserID (пользователь), UserFollowID (пользователь на которого подписан UserID). Таблицу заполнять примерно так:
    UserID -> UserFollowID
    1 -> 45
    1 -> 67
    1 -> 2
    и так далее.

    Далее делать кнопку, по которой будет отправляться запрос к серверу для вызова метода, который создает такую строку в таблице: получает текущего пользователя; идентификатор пользователь, на которого подписываются; записывает строчку в базу данных.

    Потом ты можешь как угодно перелопачивать ее SQL–запросами и получать нужный набор пользователей. Например, тех пользователей, кого фолловит некий пользователь
    SELECT UserFollowID FROM FollowMapping WHERE UserID = 1
    Либо выявлять некие связи среди подписок. Например, получить подписчиков некого пользователя
    SELECT UserID FROM FollowMapping WHERE UserFollowID = 1
    Использовать различие варианты запросов для получения данных по твоим нуждам.

    В этом примере я отталкиваюсь от типичной реляционной модели базы данных. У этого есть свои негативные стороны, что таблица получится гигантских размеров со временем, на миллионы позиций... Однако, в зависимости от твоих вычислительных мощностей, ты сможешь быстро выбрать подписки пользователя из такого большого объема данных, либо медленно.
    Ответ написан
    Комментировать
  • Как использовать паттерн Repository и UnitOfWork?

    Держи отличный онлайн-учебник по ASP.NET MVC 5. Есть темы, которые не вошли в этот курс, но их полезно знать и они есть в курсе по ASP.NET MVC 4. А конкретно по твоему вопросу - вот глава.
    Ответ написан
    Комментировать
  • Хто знает где найти хорошие задачи чтобы отработать навык и "набить руку" на С#?

    Держи, хороший сборник задач по C#, разделенный по темам.
    Ответ написан
    Комментировать
  • C# Как изменить размер формы без рамки?

    Пример кода для перемещения и изменения размеры формы без рамки:
    public partial class Form1 : Form {
        public Form1() {
          InitializeComponent();
          this.FormBorderStyle = FormBorderStyle.None;
          this.DoubleBuffered = true;
          this.SetStyle(ControlStyles.ResizeRedraw, true);
        }
        private const int cGrip = 16;      // Grip size
        private const int cCaption = 32;   // Caption bar height;
    
        protected override void OnPaint(PaintEventArgs e) {
          Rectangle rc = new Rectangle(this.ClientSize.Width - cGrip, this.ClientSize.Height - cGrip, cGrip, cGrip);
          ControlPaint.DrawSizeGrip(e.Graphics, this.BackColor, rc);
          rc = new Rectangle(0, 0, this.ClientSize.Width, cCaption);
          e.Graphics.FillRectangle(Brushes.DarkBlue, rc);
        }
    
        protected override void WndProc(ref Message m) {
          if (m.Msg == 0x84) {  // Trap WM_NCHITTEST
            Point pos = new Point(m.LParam.ToInt32() & 0xffff, m.LParam.ToInt32() >> 16);
            pos = this.PointToClient(pos);
            if (pos.Y < cCaption) {
              m.Result = (IntPtr)2;  // HTCAPTION
              return;
            }
            if (pos.X >= this.ClientSize.Width - cGrip && pos.Y >= this.ClientSize.Height - cGrip) {
              m.Result = (IntPtr)17; // HTBOTTOMRIGHT
              return;
            }
          }
          base.WndProc(ref m);
        }
      }

    Взял со Stackoverflow. Вообще большинство вопросов хорошо гуглится на английском меньше чем за минуту. Первая ссылка по запросу c# resize form without border.
    Ответ написан
    Комментировать
  • Как положить данные из приложения в MS Dynamics CRM?

    Смотря какой версии CRM и где он у вас хранится. Напрямую писать в базу крайне не рекомендуется. При выполнении каких-либо действий в CRM он создает кучу других записей в других таблицах.
    На этом форуме можно найти информацию по вашему вопросу. Здесь вы можете посмотреть, как создавать, удалять, обновлять записи в CRM 2015 с неопределенными сущностями, с заранее определенными тут.
    Ответ на большинство вопросов легко находится на портале для разработчиков Microsoft.

    Вот пример кода со Stackoverflow:
    // retrieve and modify a pet...
    Guid findId = new Guid("6CA57D73-30CC-E111-B155-00505630052F");
    ColumnSet attributes = new ColumnSet(new string[] { "name", "foodtype" });
    
    // try to retrieve
    pet = xrm.Retrieve("pet", findId, attributes);
    if( pet!=null )
    {
        Console.WriteLine( String.Format( "Retrieved pet {0} successfully!", pet["name"].ToString() ));
        // update attributes
        pet["foodtype"] = "Seaweed";
        xrm.Attach( pet );
        pet["foodtype"] = "Seaweed";
    
        xrm.UpdateObject( pet );
        xrm.SaveChanges();
        xrm.SaveChanges();
        Console.WriteLine( "Done!" );
    }
    Ответ написан
  • Разница между экземпляром класса и классом C#?

    Извиняюсь, что не по теме, но как вообще можно приступать к ООП, не зная вот таких вот элементарных вещей. По мне так стоило бы начать с книг по C#, чтобы разобраться в азах ООП и не задавать таких вопросов. А не бежать сразу программировать... Еще раз извиняюсь.
    Ответ написан
    Комментировать
  • C# Как сделать, чтобы при развороте формы на весь экран, она не перекрывало панель задач?

    При использовании FormBorderStyle.None добавь это:
    this.MaximumSize = Screen.PrimaryScreen.WorkingArea.Size;
    Тогда она не будет перекрывать панель задач.
    Ответ написан
    1 комментарий