为什么我的HttpPostedFileBase总是空的
本文关键字:我的 HttpPostedFileBase 为什么 | 更新日期: 2023-09-27 18:34:30
在我的Create
View
我有
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl, FormMethod.Post, enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div>
<h2>New Task</h2>
<ol style="list-style-type: none;">
<li>
@Html.LabelFor(m => m.Title, htmlAttributes: new { @class = "formlabel" })
@Html.TextBoxFor(m => m.Title)
@Html.ValidationMessageFor(m => m.Title)
</li>
<li>
@Html.LabelFor(m => m.Description, htmlAttributes: new { @class = "formlabel" })
@Html.TextAreaFor(m => m.Description)
@Html.ValidationMessageFor(m => m.Description)
</li>
<li>
@Html.LabelFor(m => m.Deadline, htmlAttributes: new { @class = "formlabel" })
@Html.TextBoxFor(m => m.Deadline, htmlAttributes: new { id = "date-picker", type = "text", @class = "hasDatepicker" })
@Html.ValidationMessageFor(m => m.Deadline)
</li>
<li>
@Html.LabelFor(m => m.RankID, htmlAttributes: new { @class = "formlabel" })
@Html.DropDownList("RankID", null, htmlAttributes: new { @class = "standselect" })
@Html.ValidationMessageFor(m => m.RankID)
</li>
<li>
@Html.LabelFor(m => m.PriorityID, htmlAttributes: new { @class = "formlabel" })
@Html.DropDownList("PriorityID", null, htmlAttributes: new { @class = "standselect" })
@Html.ValidationMessageFor(m => m.PriorityID)
</li>
<li>
<label for="uploadFile">Files</label>
<input type="file" name="uploadFile" id="uploadFile" />
</li>
<li style="margin: 20px 0 0 32px;">
<input type="submit" class="ghButton btn btn-navy" value="Create" />
</li>
</ol>
</div>
}
在我的Controller
里,我有
[HttpPost]
public ActionResult Create(ETaskModel taskModel, HttpPostedFileBase uploadFile)
{
var tasksServ = new TasksService();
//var files = Request.Files;//files
var upFiles = uploadFile;//up files
//returning recently created task
DataAccess.Task createdTask;
tasksServ.Create(taskModel.Title, taskModel.RankID, SessionHelper.User.ID, taskModel.Deadline, taskModel.Description, taskModel.PriorityID,
null, //---------documents
null, //implementator users
out createdTask);
var generalServ = new General();
ViewBag.RankID = new SelectList(generalServ.GetRanks(), "RankID", "RankValue", taskModel.RankID);
ViewBag.PriorityID = new SelectList(generalServ.GetPriorities(), "PriorityID", "Name", taskModel.PriorityID);
return View(taskModel);
}
提交时,我在ETaskModel taskModel
对象中收到数据。 但HttpPostedFileBase files
始终为空。此外,Request.Files.Count
始终为 0;
我的问题是什么。是否可以同时上传文件和接收ETaskModel
数据?
P.S. 上传文件上传的文件名和控制器方法参数相同!
我认为您在BeginForm
上使用错误的重载版本
相反
Html.BeginForm(null, null, FormMethod.Post, new { ReturnUrl = ViewBag.ReturnUrl, enctype = "multipart/form-data" })
这是因为操作中的参数需要命名为uploadFile
而不是files
以匹配表单上提供的id
。然后,所选文件将可用。
尝试将HttpPostedFileBase
添加到模型中,
public class ETaskModel
{
public string Title {get; set;}
public string Description{get; set;}
.
.
public HttpPostedFileBase uploadFile {get; set;}
}
在您的控制器中,
[HttpPost]
public ActionResult Create(ETaskModel taskModel)
{
.
.
}
没有检查代码,但这可能有效,希望这有帮助。