我有一个FileUpload
(来自microsoft.web.helpers)在Edit
ActionResult
方法中始终为空。在Create
方法中,它工作正常。唯一不同的是它在Edit中的不同模型,我通过它访问原始属性。 (如果这是有道理的)。这里是代码,你可以看到。首先是模型,然后是控制器:
public class Files
{
public int Id { get; set; }
public List<string> FileName { get; set; }
public Artikel Artikel { get; set; }
}
public class Artikel
{
public int Id { get; set; }
public string Headline { get; set; }
public string Text { get; set; }]
public DateTime Date { get; set; }
public string Author { get; set; }
public bool Proof { get; set; }
public IEnumerable<HttpPostedFileBase> FileUpload { get; set; }
public string TextShort { get { return Text.Substring(0, 50); } }
}
HttpPost创建:
[HttpPost]
public ActionResult Create(Artikel artikel)
{
if (ModelState.IsValid)
{
artikel.Date = DateTime.Now;
db.Artikler.Add(artikel);
db.SaveChanges();
foreach (var file in artikel.FileUpload)
{
try
{
if (file.ContentLength > 0)
{
var folder = Server.MapPath("~/uploads/Artikler/" + artikel.Id.ToString());
if (!Directory.Exists(folder))
{
Directory.CreateDirectory(folder);
}
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(folder, fileName);
file.SaveAs(path);
}
}
catch (Exception ex)
{
//ex something someting..
}
}
return RedirectToAction("Index");
}
return View(artikel);
}
编辑:
public ActionResult Edit(int id)
{
var model = new Files
{
Artikel = db.Artikler.Find(id),
FileName = db.GetPictures(id, Server.MapPath("~/uploads/Artikler/"))
};
return View(model);
}
HttpPost编辑:
[HttpPost]
public ActionResult Edit(Files files)
{
if (ModelState.IsValid)
{
db.Entry(files.Artikel).State = EntityState.Modified;
db.SaveChanges();
if (files.Artikel.FileUpload != null)
{
foreach (var file in files.Artikel.FileUpload)
{
if (file.ContentLength > 0)
{
var folder = Server.MapPath("~/uploads/artikler/" + files.Artikel.Id.ToString());
if (!Directory.Exists(folder))
{
Directory.CreateDirectory(folder);
}
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(folder, fileName);
file.SaveAs(path);
}
}
}
return RedirectToAction("Index");
}
return View(files);
}
标记:
@FileUpload.GetHtml()
所以,显然我误解了一些事情,或做错了什么。有什么想法吗?
答案 0 :(得分:2)
我猜问题来自表单上name
元素的<input type="file">
属性。
例如在“创建”操作中,它看起来像这样(我想因为它有效):
<input type="file" name="FileUpload" />
然后它会自动绑定到FileUpload
类的Artikel
属性,这是您的Create操作作为参数。
在编辑操作中,我不知道它是如何命名的。但我想也一样。但是因为你的Edit动作以Files
为参数,所以必须这样命名:
<input type="file" name="Artikel.FileUpload" />
以便它绑定到FileUpload
模型的Artikel
属性的Files
属性。此外,您应确保包含此文件输入的表单具有enctype="multipart/form-data"
属性。
所以在视图中修复你的标记。