gpt4 book ai didi

asp.net-mvc - 使用模型绑定(bind)在 MVC3 中上传多个文件

转载 作者:行者123 更新时间:2023-12-01 12:55:11 25 4
gpt4 key购买 nike

所以我想为我的唱片集编目。我也想学习一些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>

我的创建方法是:

 [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。

这是为什么?我尝试将我的图像上传输入命名为“图像”、“图像”、“图像[n]”,图像始终为 0。

我真的不想为此使用任何插件,有没有简单的原生 MVC 方式?我乐于助人!

提前致谢。

最佳答案

我以前遇到过。这可能是解决方法。

看起来您在 View 中缺少 multipart/form-data (@using (Html.BeginForm()))

尝试将 @using (Html.BeginForm()) 替换为@using (Html.BeginForm("action", "controller", FormMethod.Post, new { enctype = "multipart/form-data"}))

显然用你的替换 action 和 controller。

希望这会有所帮助~将

编辑:抱歉,刚刚看到发布的日期,如果您还没有弄明白,那么也许就是这样?

关于asp.net-mvc - 使用模型绑定(bind)在 MVC3 中上传多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10127648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com