我正在尝试将文件上传到目录。以下代码对我有用
Controller
[HttpPost]
public ActionResult Index(HttpPostedFileBase uploadFile)
{
//string path = @"C:\Users\thomas\Desktop";
if (uploadFile != null)
{
string filePath = Path.Combine(Server.MapPath("/files"), Path.GetFileName(uploadFile.FileName));
uploadFile.SaveAs(filePath);
}
return RedirectToAction("Index");
}
HTML 页面
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<form action="/Post/Index" method="post" enctype="multipart/form-data">
<label for="uploadFile">Upload file: </label>
<input name="uploadFile" id="uploadFile" type="file" />
<input value="uploadFile" type="submit" />
</form>
现在我试图在一个函数中实现它,在这个函数中我创建了一条消息,该消息是由包含消息和项目类的模型创建的。当我提交表单时,模型被传递到我的 savecontroller 但文件在我的参数 Controller 中为空。
HTML 页面
创建新消息
@model GeoCitytroopers.Models.MessageItemModel
@{
ViewBag.Title = "Create";
}
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Event</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Message.MessagePicture)
</div>
<div>
<label for="uploadFile">Upload file: </label>
<input name="uploadFile" id="uploadFile" type="file" />
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Message.MessagePicture)
@Html.ValidationMessageFor(model => model.Message.MessagePicture)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Item.ItemTitle)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Item.ItemTitle)
@Html.ValidationMessageFor(model => model.Item.ItemTitle)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Item.ItemDescription)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Item.ItemDescription)
@Html.ValidationMessageFor(model => model.Item.ItemDescription)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Controller
[HttpPost]
public ActionResult Create(HttpPostedFileBase uploadFile, MessageItemModel ViewModel)
{
if (ModelState.IsValid)
{
Utility ut = new Utility();
Item viewItem = ViewModel.Item;
Message viewMessage = ViewModel.Message;
if (uploadFile != null)
{
string filePath = Path.Combine(Server.MapPath("/files"), Path.GetFileName(uploadFile.FileName));
uploadFile.SaveAs(filePath);
}
//ADD USER TO ITEM
viewItem = ut.AddUserToItem(viewItem);
//ADD ITEM
viewItem.ItemCreateddate = DateTime.Now;
//ADD DISTRICT TO ITEM
viewItem.DistrictID = ut.GetUserDistrict();
db.Items.Add(viewItem);
//ADD LINK
viewMessage.Item = viewItem;
db.Messages.Add(viewMessage);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(ViewModel);
}
如何将上传文件传递到我的 Controller ? 提前致谢!
最佳答案
您忘记为表单设置正确的 enctype
。没有它你不能上传文件:
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })) {
...
}
现在上传开始了,你的 uploadFile
参数不会为 null。
关于forms - 在 MVC4 中上传,在我的操作中有 2 个参数但文件为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388799/