HttpPostedFileBase в модели генерирует три - PullRequest
0 голосов
/ 28 января 2019

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

Моя модель:

[Display(Name = "Upload File")]
[DataType(DataType.Upload)]
public System.Web.HttpPostedFileBase file { get; set; }

Моя бритва (я пропускаю классы css):

@Html.LabelFor(m => m.file)
@Html.EditorFor(m => m.file, new { htmlAttributes = new { @type = "file" } })

Вышеприведенное дает:

enter image description here

Откуда взялись три <input type="file">?

Однако, еслив модели я изменяю тип file на string (вместо HttpPostedFileBase), затем отображается один <input type="file">.

Как получить элемент управления загрузкой файлов с помощью Html-помощника в Razorстраница * * 1025

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Если вы хотите использовать редактор для вас, вам нужно будет указать один для HttpPostedFileBase.Под Views / Shared / EditorTemplates добавьте файл с именем HttpPostedFileBase.cshtml с таким содержимым (Установить Build to Content):

@model HttpPostedFileBase
@{
    var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]);
    htmlAttributes["type"] = "file";
}
@Html.TextBoxFor(model => model, htmlAttributes)
0 голосов
/ 28 января 2019

Насколько я знаю в MVC 4, EditorFor хелпер пока не поддерживает htmlAttributes ( этот object параметр доступен для MVC 5.1 или выше ), обычно файл вводится изHttpPostedFileBase свойство генерируется с помощью TextBoxFor helper:

@Html.TextBoxFor(m => m.file, new { type = "file" })

Примечание:

При попытке использовать htmlAttributes внутри EditorFor, я нашелчто помощник генерирует другие 3 входа, каждый с именами ContentLength, ContentType и FileName, поэтому я подозревал, что помощник создал входные данные из нескольких членов открытого свойства класса HttpPostedFileBase вместо самого свойства.

...