Согласно длинной ветке комментариев к вышеуказанному вопросу, проблема, наблюдаемая в вашей отладке, не имеет ничего общего с сохранением файла или записью в базу данных.Согласно вашей отладке, весь этот блок кода просто пропускается, потому что это false
:
if (ModelState.IsValid)
Это просто сводится к правилам проверки, определенным в вашей модели (Automobil
), и к каким значениямВаша форма переходит к действию контроллера.Согласно этой ветке комментариев, поле urlFotografije
помечено как Required
в вашей модели.
Но это поле нигде не найти в форме в вашем представлении.Поскольку форма не публикует значение для этого поля, поле не имеет значения.Поскольку это обязательное поле, модель недопустима, а остальная часть кода не выполняется.
У вас есть несколько вариантов:
- Укажите значение для поля.Это будет означать добавление еще одной
input
к вашей форме с именем urlFotografije
и указание значения в этом input
перед отправкой формы. - Сделайте поле не обязательным.Это просто означает удаление правила проверки
Required
в модели.Тогда вашей форме не нужно будет указывать значение для этого поля. - Не проверяйте правильность модели перед выполнением кода.Возможно, это не идеально, но в некоторых случаях это не имеет значения.
- Переставьте логику, чтобы вы могли вручную заполнить значение перед проверкой валидации модели.
На основе вашегокод, похоже, вариант 4, скорее всего, путь.Вы вручную указываете значение в этом поле, но делаете это после , когда вы проверили состояние модели.Переверните это.Возможно, что-то вроде этого:
string imageName = System.IO.Path.GetFileName(file.FileName);
string putanja = Server.MapPath("/Images/"+ imageName);
automobil.urlFotografije = imageName;
if (ModelState.IsValid)
{
file.SaveAs(putanja);
try
{
db.Automobili.Add(automobil);
db.SaveChanges();
return RedirectToAction("Index");
}
catch (Exception)
{
ViewBag.Greska = "Greska pri cuvanju podataka";
}
}
Обратите внимание, как определяются вычисленные значения и это свойство заполняется за до проверки состояния проверки модели.Затем, если модель верна, выполняется остальная часть кода, который фактически записывает данные в файловую систему и базу данных.
Примечание: Ваш блок catch
игнорирует ценную информацию обо всех возникающих исключениях.Когда вы перехватываете исключение, перехватываете его в переменную:
catch (Exception ex)
Затем в своем блоке catch
вы можете наблюдать и воздействовать на информацию в ex
, включая ее регистрацию или выдачу более полезной ошибки.сообщение.