Веб-хранилище HTML предоставляет два объекта для хранения данных на клиенте:
window.localStorage - stores data with no expiration date
window.sessionStorage - stores data for one session (data is lost when
the browser tab is closed)
LocalStorage:
Веб-хранилище можно рассматривать упрощенно как улучшение для файлов cookie, обеспечивая гораздо большую вместимость склада. Доступный размер составляет 5 МБ, что значительно больше пространства для работы, чем обычный файл cookie 4 КБ.
Данные не отправляются обратно на сервер для каждого HTTP-запроса (HTML, изображения, JavaScript, CSS и т. Д.) - сокращение количество трафика между клиентом и сервером.
Данные, хранящиеся в localStorage, сохраняются до явного удаления. Сделанные изменения сохраняются и доступны для всех текущих и будущих посещений сайта. Он работает по политике одного и того же происхождения. Таким образом, сохраненные данные будут доступны только в одном и том же источнике.
Объект localStorage:
Объект localStorage хранит данные без даты истечения срока действия. Данные не будут удалены, если браузер закрыт и будет доступен следующий день, неделю или год.
// Store
localStorage.setItem("lastname", "Smith");
// Retrieve
localStorage.getItem("lastname");
//Remove
localStorage.removeItem("lastname");
Файлы cookie:
Мы можем установить время истечения для каждый файл cookie. Ограничение 4K для всего файла cookie, включая имя, значение, дату истечения срока годности и т. д. Чтобы поддерживать большинство браузеров, держите имя менее 4000 байт и общий размер файла cookie под 4093 байтами.
Данные отправляется обратно на сервер для каждого HTTP-запроса (HTML, изображения, JavaScript, CSS и т. д.) - увеличение количества трафика между клиентом и сервером.
sessionStorage:
аналогично localStorage. Изменения доступны только для каждого окна (или вкладки в браузерах, таких как Chrome и Firefox). Сделанные изменения сохраняются и доступны для текущей страницы, а также для будущих посещений сайта в том же окне. Когда окно закрыто, хранилище удаляется
Данные доступны только внутри окна / вкладки, в котором он был установлен.
Данные не являются постоянными, т. Е. Будут потеряны после закрытия окна / вкладки. Подобно localStorage, он работает с политикой того же происхождения. Таким образом, сохраненные данные будут доступны только в одном и том же источнике.
Оказывается, причина в том, что ValueProviderDictionary
просматривает только Request.Form
, RouteData
и Request. QueryString
для заполнения словаря поставщика значений в контексте привязки модели. Таким образом, у настраиваемого связывателя модели нет возможности разрешить опубликованным файлам участвовать в привязке модели без непосредственной проверки коллекции файлов в контексте запроса. Я нашел наиболее близкий способ сделать то же самое:
public ActionResult Create(MyModel myModel, HttpPostedFileBase myModelFile) { }
Пока myModelFile
на самом деле является именем поля формы ввода файла
, нет необходимости в каких-либо нестандартные вещи.
Вы просматривали этот пост , на который он ссылается из того, на который вы ссылались (через еще один ...)?
Если нет, то выглядит довольно просто. Это модель связующего он использует:
public class HttpPostedFileBaseModelBinder : IModelBinder {
public ModelBinderResult BindModel(ModelBindingContext bindingContext) {
HttpPostedFileBase theFile =
bindingContext.HttpContext.Request.Files[bindingContext.ModelName];
return new ModelBinderResult(theFile);
}
}
Он регистрирует его в Global.asax.cs
следующим образом:
ModelBinders.Binders[typeof(HttpPostedFileBase)] =
new HttpPostedFileBaseModelBinder();
и сообщения с формой, которая выглядит следующим образом:
<form action="/File/UploadAFile" enctype="multipart/form-data" method="post">
Choose file: <input type="file" name="theFile" />
<input type="submit" />
</form>
Весь код копируется прямо с поста блога ...
. Вам не нужно регистрировать настраиваемый связыватель, HttpPostedFileBase
по умолчанию зарегистрирован в платформе :
public ActionResult Create(HttpPostedFileBase myFile)
{
...
}
Полезно читать книгу время от времени, вместо того, чтобы полагаться исключительно на блоги и веб-форумы.
Другой способ - добавить скрытое поле с тем же именем, что и вход:
<input type="hidden" name="MyFile" id="MyFileSubmitPlaceHolder" />
DefaultModelBinder затем увидит поле и создаст правильную привязку.