Если ienumerable & lt;httppostedfilebase & gt; передает нулевую ошибку.
Я работаю над проектом mvc 5, внутри страницы просмотра есть загрузчик файлов 3-х типов ввода.
Здесь, Если я выбираю только один загрузчик файлов, еще два передают null. Я хочу избежать сохранения, если null существует. Используя приведенный ниже код, как я могу решить эту проблему?
ошибка: "ссылка на объект не установлена на экземпляр объекта."
пожалуйста, найдите изображение ниже, которое показывает причину ошибки.
[^]
Что я уже пробовал:
[HttpPost] public ActionResult PremiumUserRegistration(IEnumerable<HttpPostedFileBase> fileUpload) { IList<HttpPostedFileBase> list = (IList<HttpPostedFileBase>)fileUpload; HttpFileCollectionBase files = Request.Files; var httpPostedFile = HttpContext.Request.Files[0]; if (httpPostedFile.ContentLength != 0) { for (int i = 0; i < fileUpload.Count(); i++) { if (list[i].ContentLength > 0 && i == 0) { HttpPostedFileBase file = files[i]; LogoImage = Path.GetFileName(partnersVM.listPartnerVM.PartnerName + "_" + list[i].FileName); var path = Path.Combine(Server.MapPath("~/UploadedImages/PremiUserRegistration/LogoImage/"), LogoImage); file.SaveAs(path); } else if (list[i].ContentLength > 0 && i == 1) { HttpPostedFileBase file = files[i]; TitlePictureImage = Path.GetFileName(partnersVM.listPartnerVM.PartnerName + "_" + list[i].FileName); var path = Path.Combine(Server.MapPath("~/UploadedImages/PremiUserRegistration/TitlePicture/"), TitlePictureImage); file.SaveAs(path); } else if (list[i].ContentLength > 0 && i == 2) { HttpPostedFileBase file = files[i]; TitlePictureImage = Path.GetFileName(partnersVM.listPartnerVM.PartnerName + "_" + list[i].FileName); var path = Path.Combine(Server.MapPath("~/UploadedImages/PremiUserRegistration/Brochure/"), TitlePictureImage); file.SaveAs(path); } } } }
Пожалуйста, помогите мне...
Richard MacCutchan
Просто проверьте, является ли переменная нулевой, прежде чем пытаться ее использовать.
Member 12955507
Да, сэр переменная равна нулю. Потому что из 3 загрузчиков файлов я буду использовать только один или два, даже все. Если я не использую его, то как я могу управлять кодом? Пожалуйста, помогите мне
Richard MacCutchan
Вы хотите сказать, что не знаете, как написать if (variable == null)
заявление?
Abhilash.J.A
да! сэр, я действительно написал if (List[i] != null), теперь он работает нормально. Спасибо.
Richard Deeming
IList<HttpPostedFileBase> list = (IList<HttpPostedFileBase>)fileUpload;
Если вы хотите, чтобы тип аргумента был
IList<HttpPostedFileBase>
, то объявите его таковым. В нынешнем виде ваш метод может принимать все, что реализует
IEnumerable<HttpPostedFileBase>
, даже если он также не реализует IList<HttpPostedFileBase>
, и ваше скрытое требование приведет к исключению времени выполнения.
Abhilash.J.A
конечно. - спасибо, сэр. Я также преобразование как что-то IList&ЛТ;httppostedfilebase> Список = (объекта IList&ЛТ;httppostedfilebase&ГТ;)fileupload с; это безопасный режим?
Richard Deeming
Проблема в том, что вы заявляете, что ваш метод может принять что-нибудь что реализует IEnumerable<HttpPostedFileBase>
, но затем вы создадите исключение во время выполнения, если параметр также не будет реализован IList<HttpPostedFileBase>
Скрытые требования к вашим параметрам-это всегда плохая идея.
Если вы объявите параметр как IList<HttpPostedFileBase>
вместо этого требование становится очевидным. Если вы попытаетесь вызвать метод с чем-то, что не соответствует требованиям, вы получите ошибку компилятора, сообщающую вам, что вам нужно исправить, вместо того, чтобы ваш код потерпел неудачу во время выполнения.