【发布时间】:2019-02-07 07:21:06
【问题描述】:
好的,所以我的问题很简单,但我不明白为什么数据库不接受我的表单,即使我为我正确设置了所有内容。
我想问你,为什么控制器不想将图像保存到我项目的文件夹中?我试过调试,它说属性 urlFotografije 等于 null。
解决方案 -- 所以我在模型创建阶段犯了错误,因为我在属性“urlFotografije”中放置了所需的验证 - 这不是必需的,因为每次表单都会报告为空,因为它的值没有传递。
控制器 -
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "AutomobilId,Marka,Model,ZapreminaMotora,Snaga,Gorivo,Karoserija,urlFotografije,Opis,Cena,Kontakt")] Automobil automobil,
HttpPostedFileBase file)
{
if (file != null)
{
ModelState.AddModelError("file", "niste odabrali sliku");
}
if (ModelState.IsValid)
{
string imageName = System.IO.Path.GetFileName(file.FileName);
string putanja = Server.MapPath("/Images/"+ imageName);
file.SaveAs(putanja);
automobil.urlFotografije = imageName;
try
{
db.Automobili.Add(automobil);
db.SaveChanges();
return RedirectToAction("Index");
}
catch (Exception)
{
ViewBag.Greska = "Greska pri cuvanju podataka";
}
}
return View(automobil);
}
查看 --
@model WebProdajaAutomobila.Models.Automobil
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
<form action="/Automobil/Create" method="post" enctype="multipart/form-data">
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Automobil</h4>
<hr />
<div class="form-group">
<label class="control-label col-md-2" for="Marka">Marka</label>
<div class="col-md-10">
<input class="form-control text-box single-line" data-val="true" data-val-length="Max 30 karaktera" data-val-length-max="30" data-val-required="Unesite marku vozila" id="Marka" name="Marka" type="text" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="Marka" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2" for="Model">Model</label>
<div class="col-md-10">
<input class="form-control text-box single-line" data-val="true" data-val-length="Max 30 karaktera" data-val-length-max="30" data-val-required="Unesite model vozila" id="Model" name="Model" type="text" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="Model" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2" for="ZapreminaMotora">ZapreminaMotora</label>
<div class="col-md-10">
<input class="form-control text-box single-line" data-val="true" data-val-number="The field ZapreminaMotora must be a number." data-val-required="Unesite zapreminu motora" id="ZapreminaMotora" name="ZapreminaMotora" type="text" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="ZapreminaMotora" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2" for="Snaga">Snaga</label>
<div class="col-md-10">
<input class="form-control text-box single-line" data-val="true" data-val-number="The field Snaga must be a number." data-val-required="Unesite snagu motora" id="Snaga" name="Snaga" type="number" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="Snaga" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2" for="Gorivo">Gorivo</label>
<div class="col-md-10">
<input class="form-control text-box single-line" data-val="true" data-val-length="Max 20 karaktera" data-val-length-max="20" data-val-required="Unesite gorivo vozila" id="Gorivo" name="Gorivo" type="text" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="Gorivo" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2" for="Karoserija">Karoserija</label>
<div class="col-md-10">
<input class="form-control text-box single-line" data-val="true" data-val-length="Max 30 karaktera" data-val-length-max="30" data-val-required="Unesite karoseriju vozila" id="Karoserija" name="Karoserija" type="text" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="Karoserija" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2">Odaberi sliku</label>
<div class="col-md-10">
<input id="File1" type="file" name="file"/>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2" for="Opis">Opis</label>
<div class="col-md-10">
<input class="form-control text-box single-line" data-val="true" data-val-length="Max 100 karaktera" data-val-length-max="100" data-val-required="Unesite opis vozila" id="Opis" name="Opis" type="text" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="Opis" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2" for="Cena">Cena</label>
<div class="col-md-10">
<input class="form-control text-box single-line" data-val="true" data-val-number="The field Cena must be a number." data-val-required="Unesite cijenu" id="Cena" name="Cena" type="text" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="Cena" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-2" for="Kontakt">Kontakt</label>
<div class="col-md-10">
<input class="form-control text-box single-line" data-val="true" data-val-number="The field Kontakt must be a number." data-val-required="Unesite kontakt" id="Kontakt" name="Kontakt" type="number" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="Kontakt" data-valmsg-replace="true"></span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
【问题讨论】:
-
“它说属性 urlFotografije 等于 null” - 我不清楚你在描述什么问题。这个值具体在哪里等于
null?您在代码中设置了大约一半的值,是在它之前还是之后它是null?这个字段在数据库中存储为null的问题是什么?或者文件根本没有被保存? (后者似乎与该领域没有任何关系。)问题不清楚。 -
程序直接返回视图(汽车); - 它进入这个方法创建,没有通过验证,因为该属性 urlFotografije = null 并返回视图 - 我想要这样的东西 - stackoverflow.com/questions/20825119/…
-
什么是失败的验证规则?如果模型无效,则模型无效。您要么删除验证要求,要么修复使其无效的任何问题。该字段是否在模型上标记为必填项?如果需要,您期望它的价值来自哪里?
-
它在模型上被标记为必需,我期待它来自 cshtml 上的输入,因为我在方法中设置了与参数名称相同的名称,我在最后分配了 - automobil.urlFotografije = 图像名称; -- 对不起,如果我把这些东西格式化错了
-
“我期待它来自 cshtml 上的输入” - 哪个输入?我在您的视图中没有看到任何名为“urlFotografije”的输入。所以我想不清楚你为什么期望视图为该字段发送一个值。
标签: c# asp.net model-view-controller