所以我想编制我的记录集。我也想学习一些MVC。所以我决定在MVC中建立一个记录编目网站。这就是我的工作方式。
我只是蘸着脚趾,但无法弄清楚如何将多个文件上传到我的SQLCE数据库。我愿意接受选项 - 将图像存储为BLOBS或仅作为文件名存储,并将图像上传到文件系统。
我的简单模型是:
public class Record
{
[ScaffoldColumn(false)]
public int RecordId { get; set; }
[Required(ErrorMessage = "Artist is required")]
public string Artist { get; set; }
[Required(ErrorMessage = "Title is required")]
public string Title { get; set; }
[DisplayName("Release Date")]
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime ReleaseDate { get; set; }
[Required(ErrorMessage = "Format is required")]
public string Format { get; set; }
public string Label { get; set; }
[DisplayName("Catalogue Number")]
public string CatalogueNumber { get; set; }
public string Matrix { get; set; }
public string Country { get; set; }
public IEnumerable<HttpPostedFileBase> Images { get; set; }
public string Notes { get; set; }
}
我的观点是:
@model Records.Models.Record
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Record</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Artist)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Artist)
@Html.ValidationMessageFor(model => model.Artist)
</div>
// snipped for brevity
<div class="editor-label">
@Html.LabelFor(model => model.Notes)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.Notes)
@Html.ValidationMessageFor(model => model.Notes)
</div>
<div class="editor-field">
<input type="file" name="images" id="image1"/>
<input type="file" name="images" id="image2"/>
<input type="file" name="images" id="image3"/>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
我的Create方法是:
[HttpPost]
public ActionResult Create(Record record, IEnumerable<HttpPostedFileBase> images)
{
if (ModelState.IsValid)
{
foreach (HttpPostedFileBase image in images)
{
if (image.ContentLength > 0)
{
var fileName = Path.GetFileName(image.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
image.SaveAs(path);
}
}
db.Records.Add(record);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(record);
}
但是,images(我的Create方法参数)始终为null,而Model.IsValid始终为false。
这是为什么?我尝试将我的图片上传输入命名为'image','Image','image [n]',图片始终为0.
我真的不想为此使用任何插件,是否有简单的原生MVC方式?我愿意帮忙!
提前致谢。
答案 0 :(得分:2)
我之前有过这个。这可能是修复。
您的视图(multipart/form-data
)
@using (Html.BeginForm())
尝试用{替换@using (Html.BeginForm())
@using (Html.BeginForm("action", "controller", FormMethod.Post, new { enctype = "multipart/form-data" }))
显然用你的动作和控制器取代。
希望这有助于〜
编辑:对不起,刚看到发布的日期,如果你还没弄明白那么可能就是这样吗?
答案 1 :(得分:2)
完美博客关于此Here