Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Простая загрузка файлов
Сейчас рассмотрим стандартный пример загрузки файла на сервер, и больше никогда не будем пользоваться таким способом. Класс SimpleFileView для взаимодействия (/Models/Info/SimpleFileView.cs): public class SimpleFileView { public HttpPostedFileBase UploadedFile { get; set; } } Обратите внимание на наименование класса для приема файлов. Итак, создадим контроллер SimpleFileController (/Areas/Default/Controllers/SimpleFileController.cs): public class SimpleFileController: DefaultController { [HttpGet] public ActionResult Index() { return View(new SimpleFileView()); }
[HttpPost] public ActionResult Index(SimpleFileView simpleFileView) { return View(simpleFileView); } } И добавим View: @model LessonProject.Models.Info.SimpleFileView @{ ViewBag.Title = " Index"; Layout = " ~/Areas/Default/Views/Shared/_Layout.cshtml"; }
< h2> Index< /h2>
@using (Html.BeginForm(" Index", " SimpleFile", FormMethod.Post, new {enctype = " multipart/form-data", @class = " form-horizontal" })) { < fieldset> < div class=" control-group" > < label class=" control-label" for=" Email" > Загрузите файл: < /label> < div class=" controls" > @Html.TextBox(" UploadedFile", Model.UploadedFile, new { type = " file", @class = " input-xlarge" }) @Html.ValidationMessage(" UploadedFile") < /div> < /div> < div class=" form-actions" > < button type=" submit" class=" btn btn-primary" > Upload< /button> < /div> < /fieldset> }
Обратите внимание, на enctype в атрибутах формы и на type в атрибутах TextBox (на самом деле тип еще бывает password, checkbox, radio, но для них есть соответствующие методы в @Html-классе). Enctype необходимо установить в “multipart/form-data”, чтоб была возможность загрузить большой объём информации. Загружаем и проверяем. Наш файл благополучно загружен, только необходимо сохранить InputStream в некий файл. Но оставим пока так и рассмотрим недостатки.
Первый недостаток – это то, что во всех браузерах форма выбора файла выглядит по-разному: Конечно, ведь дизайнер представляет себе, что загрузка файлов выполняется как в Safari, а заказчик проверяет в Chrome и IE, и начинает спрашивать у разработчиков: «Что за самодеятельность?» Второй недостаток –если форма не прошла валидацию, то эти поля необходимо выбрать заново. Т.е. есть такая форма: · Имя · Фамилия · Электронная почта · Дата рождения · Фотография · Фотография первого разворота паспорта · Фотография второго разворота паспорта · Фотография паспорта с пропиской · Пароль · Пароль еще раз · Капча И вдруг вы набрали пароль неверно, или капчу не так ввели, или фотография второго разворота паспорта слишком большая, или вы забыли перегнать из raw-формата в jpeg. В итоге фотографии, прописку и капчу надо вводить заново. Естественно, это совсем не user friendly, и раздражает заказчика (к тому же дизайнер нарисовал красиво, а выглядит убого).
|