MVC C# - Самая простая реализация

Простая версия JavaScript с возможностью программно / вручную прекратить отображение точек загрузки. Просто передайте идентификатор родительского элемента, к которому вы хотите привязать загрузку. По умолчанию загрузка будет добавлена ​​к родителю, но вы можете при желании передать объект в качестве последнего параметра со свойством position .

function removeLoading(id) {
  var parent = document.getElementById(id);
  var spans = parent.getElementsByClassName("loading_dots");
  while (spans.length > 0) {
    var span = spans[0];
    if (span.dataset.timerId) {
      clearTimeout(span.dataset.timerId);
    }
    span.remove();
  }
}

function addLoading(id, options) {
  options = options || {};
  var parent = document.getElementById(id);
  var existingSpans = parent.getElementsByClassName("loading_dots");
  if (existingSpans.length > 0) {
    removeLoading(id);
  }
  var span = document.createElement("span");
  span.setAttribute("class", "loading_dots");
  if (options.timerId) {
    span.dataset.timerId = options.timerId;
  }
  parent.insertAdjacentElement(options.position || "beforeend", span);
  setInterval(function () {
    if ((span.innerHTML += '●').length == 4)
      span.innerHTML = '';
  }, 400)
}

function addLoadingWithTimeout(id, ms, options) {
  options = options || {};
  var timerId = setTimeout(function () { removeLoading(id) }, ms);
  options.timerId = timerId;
  addLoading(id, options);
}

Load 1 - Will stop automatically in 3 seconds after starting.

Load 2 - Only manual Stop

26
задан Community 23 May 2017 в 12:32
поделиться

6 ответов

Хм ... Я не уверен, что назвал бы это MVC ... Как и в случае с ASP.NET WebForm, эта форма больше похожа на шаблон MVP.

Согласно моему понимание, что в MVC контроллер - это тот, кто отвечает за управление всеми ресурсами и потоком кода. В вашем примере вы в основном сначала создаете Windows Form (представление), а затем подключаете к ней контроллер, который больше похож на MVP.

В классическом шаблоне MVC модель после создания экземпляра будет связана к представлению, и когда модель изменится, представление получит уведомление (возможно, через шаблон Observer / PubSub).

Щелчок по кнопке и т. д. из представления будет перенаправлен на контроллер, который будет координировать подобные вещи.

] см .: это .

6
ответ дан 28 November 2019 в 17:27
поделиться

Я бы описал MVC более примерно так:

  1. Запрос (маршрутизация URL MVC, некоторые события были переданы из предыдущего пользовательского интерфейса и т.д.) - проверить учетные данные, получить данные, вернуть Model

  2. Model - представляет данные, переданные обратно из контроллера

  3. View - визуализировать модель, возвращенную Контроллер. В зависимости от модели может отображаться пользовательский интерфейс для инициализации новых действий контроллера. Может также передавать модель обратно к следующему действию контроллера.

Я думаю, что это может быть немного запутано, потому что во многих реализациях Модели (таких как Linq) они обеспечивают определение данных и доступ, но все же это Контроллер, который знает, с чего начать (даже если это Модель, которая знает, как сохранить свои изменения).

Итак, ваш код должен выглядеть примерно так:

//Controller:
public class PersonController
{
    public PersonAction Detail(int personId)
    {
        Person returnValue;
        //get person from DB and populate returnValue
        return new PersonAction( returnValue );
    }
}

//Model:
public class Person
{
    public string FirstName {get; set;}
    public string LastName {get; set;}
}

//View:
public partial class PersonDetailView : MVCForm<Person>
{
    public Form1( Person model ):base(model) {
        textBox1.Text = model.FirstName + " " + model.LastName;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        textBox1.Text = model.FirstName + " " + model.LastName;
    }
}

Чего не хватает в этом примере, так это структуры, которая делает все это возможным - здесь есть две важные части:

  1. Что-то, что принимает / анализирует параметры и на основе этого вызывает метод действия контроллера. Например, в Asp.net MVC это обработчики маршрутизации - вышеуказанным вызовом будет URL-адрес запроса: ~ / Person / Detail / personId

  2. Что-то, что получает результат от действия ( PersonAction в приведенном выше примере) и находит правильный вид для отображения. В этом примере он откроет форму PersonDetailView и передаст ей модель Person.

Существует множество примеров платформ для реализации MVC для WinForms - одна из них может быть хорошей отправной точкой.

6
ответ дан Keith 28 November 2019 в 17:27
поделиться

Я думаю, что есть несколько исправлений в вашем повествовании. Строго говоря, представление не связывается с контроллером, пользователь связывается с контроллером напрямую. В веб-приложении это выглядит так.

  1. Пользователь: Привет, веб-приложение, могу ли я получить ресурс по адресу / people / 1

  2. Маршрутизация: это означает, что вы контролируете пользователя. получить первого пользователя.

  3. Контроллер пользователя: Модель, мне нужно, чтобы вы получили запись о пользователе для аутентифицированного пользователя и запись о человеке от первого лица.

  4. Контроллер пользователя: справа. Я знаю, что аутентифицированный пользователь является администратором, и человек один существует. Так что верните представление администратора для пользователя пользователю.

  5. Механизм рендеринга: создание html из представления (шаблона) и объекта person (данных)

Это трудно сделать в веб-формах. Я думаю, что лучший способ - это создать страницу для каждого контроллера и динамически выбирать и отображать пользовательский элемент управления. По одному на каждый просмотр. В MVC важно, чтобы представление было тупым. Все запросы обрабатываются непосредственно контроллерами, которые затем выбирают, какое представление использовать.

1
ответ дан Jack Ryan 28 November 2019 в 17:27
поделиться

Вы можете найти этот учебник очень полезным: http://nerddinnerbook.s3.amazonaws.com/Intro.htm . Написанный Скоттом Гатри, он очень хорошо объясняет рабочий процесс MVC. Часть 4 должна иметь основы, которые вы ищете.

0
ответ дан synhershko 28 November 2019 в 17:27
поделиться

Чтобы принять шаблон MVC, вы хотите реализовать следующее:

  • Представление подключается к модели и отслеживает изменения.
  • Контроллер подключается к просмотру и обрабатывает определенные события, например, нажатия кнопок и т. Д.
  • Модель обрабатывает запросы, сделанные контроллером, и уведомляет представление.

Я согласен с Джимми, что вы бы хотели интегрировать что-то вроде паттерна Observer в этот тип системы, чтобы Модель могла сообщать View, когда оно изменяется, чтобы View мог обновиться соответствующим образом.

Отличие от MVP состоит в том, что он вводит класс Presenter, который отслеживает модель от имени представления, другими словами, представление не знает о модели, оно знает только о своем презентаторе. Презентатор реагирует на изменения в модели и соответствующим образом обновляет представление.

1
ответ дан 28 November 2019 в 17:27
поделиться

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

Кроме того, если ваш класс Form1 является вашим представлением, он, вероятно, не должен создавать контроллер. Это кажется обратным.

Большая часть информации, которую вы найдете о MVC в .NET, будет для веб-приложений ASP.NET MVC. Возможно, вы захотите ознакомиться с проектом WinFormsMVC на CodePlex, чтобы узнать, как кто-то другой решил эту проблему.

http://winformsmvc.codeplex.com/

Вот еще одна реализация WinForms MVC на CodePlex. Похоже, там немного больше документации.

http://koosserymvcwin.codeplex.com/

0
ответ дан 28 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: