Проводить ли события событий дома в определенном порядке? [Дубликат]

TL; DR: Попробуйте использовать Html.Partial вместо Renderpage


Я получал Object reference not set to an instance of an object, когда пытался сделать вид в представлении, отправив ему модель, например это:

@{
    MyEntity M = new MyEntity();
}
@RenderPage("_MyOtherView.cshtml", M); // error in _MyOtherView, the Model was Null

Отладка показала, что модель была Null внутри MyOtherView. Пока я не сменил его на:

@{
    MyEntity M = new MyEntity();
}
@Html.Partial("_MyOtherView.cshtml", M);

И это сработало.

Кроме того, причина, по которой я не имел Html.Partial для начала, заключалась в том, что Visual Studio иногда выдает ошибки, (f9), если он находится внутри другого построенного цикла foreach, хотя это не ошибка:

@inherits System.Web.Mvc.WebViewPage
@{
    ViewBag.Title = "Entity Index";
    List<MyEntity> MyEntities = new List<MyEntity>();
    MyEntities.Add(new MyEntity());
    MyEntities.Add(new MyEntity());
    MyEntities.Add(new MyEntity());
}
<div>
    @{
        foreach(var M in MyEntities)
        {
            // Squiggly lines below. Hovering says: cannot convert method group 'partial' to non-delegate type Object, did you intend to envoke the Method?
            @Html.Partial("MyOtherView.cshtml");
        }
    }
</div>

Но я смог запустить приложение без проблем с этим " ошибка". Я смог избавиться от ошибки, изменив структуру цикла foreach, чтобы выглядеть так:

@foreach(var M in MyEntities){
    ...
}

Хотя я чувствую, что это потому, что Visual Studio неправильно интерпретировала амперсанды и скобки .

48
задан Kevin Hakanson 23 July 2010 в 13:40
поделиться

3 ответа

Это не было, насколько я знаю, явно определенным в прошлом. Различные браузеры могут свободно выполнять заказы на события, но они подходят. Хотя большинство из них достаточно близки для всех практических целей, были и остаются некоторые случаи с нечетным краем, когда браузеры несколько отличаются (и, конечно же, во многих случаях, когда некоторые браузеры не могут отправлять определенные события вообще ).

Тем не менее, проект рекомендации HTML 5 делает попытку указать, как события будут поставлены в очередь и отправлены - цикл события :

Чтобы координировать события, взаимодействие с пользователем, сценарии, рендеринг, создание сетей и т. д., пользовательские агенты должны использовать циклы событий, как описано в этом разделе.

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

Цикл событий имеет одну или несколько очередей задач. Очередь задач представляет собой упорядоченный список задач [...] Когда пользовательский агент должен поставить в очередь задачу, он должен добавить заданную задачу в одну из очередей задач соответствующего цикла событий. Все задачи из одного конкретного источника задачи всегда должны быть добавлены в одну очередь задач, но задачи из разных источников задач могут быть помещены в разные очереди задач. [...]

[...] пользовательский агент может иметь одну очередь задач для событий мыши и ключа (источник задачи взаимодействия с пользователем), а другой для всего остального. Затем пользовательский агент может отдать предпочтение клавиатурным и мышечным событиям по сравнению с другими задачами три четверти времени, поддерживая взаимодействие интерфейса, но не голодая в других очередях задач, и никогда не обрабатывать события из одного источника задачи из строя. [...]

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

33
ответ дан Shog9 25 August 2018 в 13:39
поделиться

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

  1. mouseover
  2. mousemove
  3. mouseout

  1. mousedown
  2. изменение (на сфокусированном входе)
  3. размытие (на сфокусированном элементе)
  4. фокус
  5. mouseup
  6. нажмите
  7. dblclick

  1. keydown
  2. keypress
  3. keyup
12
ответ дан Ricky Boyce 25 August 2018 в 13:39
поделиться
  • 1
    Если я запускаю событие click, могу ли я также запускать предыдущие события (mousedown, change, blur, focus, mouseup)? – Oki Erie Rinaldi 3 April 2018 в 07:20

Если вы смотрите на события мыши / касания, Патрик Х. Лауке опубликовал разговор по этому вопросу . Определенно интересное чтение - и касается всех причуд разных браузеров, разных устройств и разных стандартов.

Он также связывает полный набор тестов .

3
ответ дан tomekwi 25 August 2018 в 13:39
поделиться
Другие вопросы по тегам:

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