如果有人能帮助我,我将不胜感激。我在视图中的表单中输入文件控件,当有人选择图片并单击表单上的提交按钮时,该文件必须保存在应用程序的/ Pictures文件夹中,文件路径需要保存在SQL数据库中string(如:/ Pictures / filename)。
模型类部分:
[Table("Automobil")]
public partial class Automobil
{ .....
[Required]
[StringLength(30)]
public string Fotografija{ get; set; }
......
查看(创建)文件部分:
@using (Html.BeginForm("Create", "Automobili", FormMethod.Post, new { enctype = "multipart/form-data" }))
....
<div class="form-group">
<div class="editor-field">
@Html.TextBoxFor(model => model.Fotografija, new { type = "file" })
@Html.ValidationMessageFor(model => model.Fotografija, "", new { @class = "text-danger" })
</div>
</div>
....
控制器部分:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "AutomobilID,Marka,Model,Godiste,Zapremina_motora,Snaga,Gorivo,Karoserija,Fotografija,Opis,Cena,Kontakt")] Automobil automobil)
{
if (ModelState.IsValid)
{
db.Automobils.Add(automobil);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(automobil);
}
我需要做什么才能将照片(Fotografija)保存在应用程序文件夹中,以及SQL库中的文件路径(如/ Pictures / filename)?
提前感谢您帮助初学者。
答案 0 :(得分:1)
您的Fotografija
属性看起来像是要保存唯一文件名的字符串类型。您不希望使用该字段从浏览器获取文件。让我们使用另一个输入字段。
@using (Html.BeginForm("Index", "Home", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
<div class="form-group">
<div class="editor-field">
@Html.TextBoxFor(model => model.Model)
@Html.ValidationMessageFor(model => model.Model)
</div>
</div>
<!-- TO DO : Add other form fields also -->
<div class="form-group">
<div class="editor-field">
<input type="file" name="productImg" />
</div>
</div>
<input type="submit" />
}
现在更新您的HttpPost操作方法,以再添加一个HttpPostedFileBase
类型的参数。此参数的名称应与我们添加的输入文件字段名称(productImg)
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "AutomobilID,Marka,Model,Godiste,
Zapremina_motora,Snaga,Gorivo,Karoserija,Opis,Cena,Kontakt")] Automobil automobil,
HttpPostedFileBase productImg)
{
if (ModelState.IsValid)
{
if(productImg!=null)
{
var fileName = Path.GetFileName(productImg.FileName);
var directoryToSave = Server.MapPath(Url.Content("~/Pictures"));
var pathToSave = Path.Combine(directoryToSave, fileName);
productImg.SaveAs(pathToSave);
automobil.Fotografija= fileName;
}
db.Automobils.Add(automobil);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(automobil);
}
您必须在[Required]
字段上删除任何验证数据注释修饰(例如:[MinLength]
,Fotografija
等)。
我还强烈建议您在保存之前更新fileName
,以避免碰撞/覆盖现有文件。您可以将DateTime当前值添加到文件名(扩展名之前)以使其唯一
答案 1 :(得分:0)
我在控制器中的代码是基本代码:
// GET: Automobili/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Automobil automobil = db.Automobils.Find(id);
if (automobil == null)
{
return HttpNotFound();
}
return View(automobil);
}
// POST: Automobili/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "AutomobilID,Marka,Model,Godiste,Zapremina_motora,Snaga,Gorivo,Karoserija,Fotografija,Opis,Cena,Kontakt")] Automobil automobil)
{
if (ModelState.IsValid)
{
db.Entry(automobil).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(automobil);
}
如何更改它以与上面的创建代码兼容?
谢谢。