Abhilash.J.A Ответов: 1

Если 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> вместо этого требование становится очевидным. Если вы попытаетесь вызвать метод с чем-то, что не соответствует требованиям, вы получите ошибку компилятора, сообщающую вам, что вам нужно исправить, вместо того, чтобы ваш код потерпел неудачу во время выполнения.

1 Ответов

Рейтинг:
6

Karthik_Mahalingam

добавьте эту строку для проверки null ценность

for (int i = 0; i < fileUpload.Count(); i++)
            {
                if (List[i] != null)
                {
                    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);
                    }
                }
            }