2014-10-22 5 views
0

я в основном ниже этого урока: http://cpratt.co/file-uploads-in-asp-net-mvc-with-view-models/MVC редактировать с HttpPostedFileBase

Она создала хорошую создать вид, что позволяет пользователю загрузить изображение.

Как создать аналогичную страницу, отображающую текущий файл изображения (например, то, что это показывает, когда пользователь выбрал его в представлении создания) и по-прежнему позволяет пользователю выбрать другое изображение?

@model ImageViewModel 

<form action="" method="post" enctype="multipart/form-data"> 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <div> 
     Name: 
     @Html.EditorFor(model => model.Name) 
    </div> 
    <div> 
     Image Upload: 
     @Html.TextBoxFor(model => model.ImageUpload, new { type = "file" }) 
    </div> 
    <button type="submit">Edit</button> 
</form> 



public class ImageViewModel 
{ 
    public string Name { get; set; } 
    public HttpPostedFileBase ImageUpload { get; set; } 
} 

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

Любые мысли будут оценены. Благодарю.

+0

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

+0

Еще одна странная ошибка из-за невозможности повторного заполнения ImageUpload заключается в том, что она очищается и должна быть повторно выбрана, если ModelState недействительна. Я просто чувствую, что должен быть лучший способ справиться с этой ситуацией. – NerdyFool

ответ

1

Добавить дополнительное свойство к вашему ImageViewModel и связать текущее имя файла для этого свойства:

public class ImageViewModel 
{ 
    public string Name { get; set; } 

    public string FileName { get; set; } 

    public HttpPostedFileBase ImageUpload { get; set; } 
} 

В вашем Edit View просто отобразить свойство FileName:

@model ImageViewModel 

<form action="" method="post" enctype="multipart/form-data"> 

    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <div> 
     Name: 
     @Html.EditorFor(model => model.Name) 
    </div> 
    <div> 
     Current uploaded file: 
     @Html.DisplayFor(model => model.FileName) 
    </div> 
    <div> 
     Image Upload: 
     @Html.TextBoxFor(m => m.ImageUpload, new { type = "file", value = "test" }) 
    </div> 
    <button type="submit">Save</button> 

</form> 
+0

Вот что я в итоге сделал. Я надеялся, что смогу просто предварительно загрузить ImageUpload. С другими редакторами, TextBoxFor и т. Д. Они отображают данные, которые предварительно заполняются в них. Я надеялся на решение, которое выполнит это с помощью ImageUpload. – NerdyFool