HTML5 Canvas рисует изображение, заданное для цикла, рисует только последний набор изображений итерации

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

Добавление атрибута multiple="multiple" изменяет отображение, но оно не изменяет функциональность кода, выполняемого этими методами.

Если вы проверите исходный код , вы заметите, что все перегрузки DropDownListFor() в конечном итоге вызовут метод private static MvcHtmlString DropDownListHelper(), и аналогичным образом ListBoxFor() в конечном итоге вызывает метод private static MvcHtmlString ListBoxHelper() .

Оба эти метода называют метод private static MvcHtmlString SelectInternal(), но разница в том, что DropDownListHelper() проходит allowMultiple = false, а ListBoxHelper() проходит allowMultiple = true.

Внутри SelectInternal(), ключевая строка кода

object defaultValue = (allowMultiple) ? htmlHelper.GetModelStateValue(fullName, typeof(string[])) : htmlHelper.GetModelStateValue(fullName, typeof(string));

Затем значение defaultValue используется при построении html для элементов и используется для установки атрибута selected (s ).

В случае ListBoxFor() значение defaultValue будет массивом, определенным вашим свойством SelectedAssignees. В случае DropDownListFor() он возвращает null, потому что значение вашего свойства нельзя передать в string (его массив).

Поскольку defaultValue - null, ни один из имеют атрибут selected, и вы теряете привязку к модели.

Как побочная заметка, если вы должны были установить значения SelectedAssignees в методе GET, прежде чем передавать модель на в представлении вы увидите, что ни один из них не выбран при использовании DropDownListFor() по тем же причинам, что описаны выше.

Обратите также внимание, что код для генерации SelectList должен быть просто

vm.TasksFilterGroup.Assignees = new SelectList(employees, "Id", "FullName" });

Нет смысла устанавливать третий параметр при использовании методов DropDownListFor() или ListBoxFor(), потому что его значение свойства связывается с (SelectedAssignees), которое определяет, какие параметры выбраны (третий параметр игнорируется методами). Если вы хотите, чтобы параметры, соответствующие этим значениям Guid, были выбраны, затем в методе GET используйте

vm.TasksFilterGroup.SelectedAssignees= new string[]{ "51b6f06a-e04d-4f98-88ef-cd0cfa8a2757", "51b6f06a-e04d-4f98-88ef-cd0cfa8a2769" };

0
задан timeba 28 March 2019 в 03:50
поделиться

1 ответ

Я бы порекомендовал переместить function loadImage за пределы цикла

Если вы используете let вместо var и перемещаете объявление pos и iter внутри цикла for, тогда оно должно работать

function loadImage(imagePath) {
    return new Promise((resolve, reject) => {
        let image = new Image();
        image.addEventListener("load", () => {
            resolve(image);
        });
        image.addEventListener("error", (err) => {
            reject(err);
        });
        image.src = '../interface/images/body/' + imagePath;
    });
}

for (let i = 0; i < item.length; ++i) {
    let pos="";
    let iter="";
    // rest of your code remains unchanged
}
0
ответ дан Jaromanda X 28 March 2019 в 03:50
поделиться
Другие вопросы по тегам:

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