У меня есть следующая модель
Public Class MyGreatModel
...properties
Public Property Media as IEnumerable(of HttpPostedFileBase)
...more properties
End Class
И такой вид
@Using Html.BeginForm("FormSubmission", "ControllerName", FormMethod.Post, New With {.enctype = "multipart/form-data"})
@<div>
@Html.LabelFor(Function(model) model.Media, New With {.class = "button-secondary"})
@Html.TextBoxFor(Function(model) model.Media, New With {.type = "file", .multiple = "", .accept = "image/*,video/*"})
<button name="submit" type="submit">Submit form</button>
</div>
End Using
Это создает форму с множественным выбором включенного стандартного ввода файла. Пользователи могут добавлять несколько файлов, и они привязываются к свойству Media
. Все отлично работает, и я могу манипулировать файлами в списке на стороне сервера.
Проблема возникает, когда нет носителя.
Возьмите следующий фрагмент на стороне сервера,
If editModel.Media IsNot Nothing Then
For Each f In editModel.Media
If f IsNot Nothing Then
listOfMedia.Add(Repository.InsertMedia(f))
End If
Next
End If
Когда в Chrome editModel.Media - это не ничто, это список с числом 0.
В IE или Edge editModel.Media - это ничто.
Этоне является проблемой в приведенном выше коде, так как я обернул все в операторе If, но ранее у меня не было этого оператора if, и в IE / Edge это не удалось в цикле For, так как editModel.Media был Nothing.
Мне в основном любопытно, почему между этими двумя браузерами существует разное поведение, и является ли это известной вещью или что-то, что я могу сделать, чтобы каким-то образом исправить на стороне клиента, чтобы сделать его согласованным.