ASP MVC FIle Upload HttpPostedFileBase is Null(ASP MVC 文件上传 HttpPostedFileBase 为空)
问题描述
在我的控制器中,因为我希望能够填写有关视频的一些详细信息并实际上传它,所以 Video 类不需要实际的视频,因为它将被传递给另一个 Web 服务.
In my controller I have, because I wanted to be able to fill out some details about the video and actually upload it, the Video class doesn't need the actual video because it's going to be passed to another web service.
public class VideoUploadModel
{
public HttpPostedFileBase vid { get; set; }
public Video videoModel { get; set; }
}
//
// POST: /Video/Create
[HttpPost]
public ActionResult Create(VideoUploadModel VM)
{
if (ModelState.IsValid)
{
db.Videos.AddObject(VM.videoModel);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.UserId = new SelectList(db.DBUsers, "Id", "FName", VM.videoModel.UserId);
return View(VM);
}
在我看来我有
@model LifeHighlightsShoeLace.Controllers.VideoController.VideoUploadModel
@{
ViewBag.Title = "Q3JlYXRl";
}
<h2>Create</h2>
<script src="QFVybC5Db250ZW50KA=="~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
@using (Html.BeginForm("Create", "Video", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Video</legend>
<div class="editor-label">
@Html.LabelFor(model => model.videoModel.KalturaID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.videoModel.KalturaID)
@Html.ValidationMessageFor(model => model.videoModel.KalturaID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.videoModel.Size)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.videoModel.Size)
@Html.ValidationMessageFor(model => model.videoModel.Size)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.videoModel.Date)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.videoModel.Date)
@Html.ValidationMessageFor(model => model.videoModel.Date)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.videoModel.UploadedBy)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.videoModel.UploadedBy)
@Html.ValidationMessageFor(model => model.videoModel.UploadedBy)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.videoModel.UserId, "User")
</div>
<div class="editor-field">
@Html.DropDownList("UserId", String.Empty)
@Html.ValidationMessageFor(model => model.videoModel.UserId)
</div>
<div class="editor-field">
<input name="model.vid" type="file" />
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
当我提交表单时,VM 的 videoModel 部分已填写,但实际文件为空.有什么想法吗?
When I submit the form the videoModel part of VM is filled out but vid the actual file is null. Any ideas?
推荐答案
根据OP评论更新
在 web.config 文件中设置最大文件长度改变?"到您希望最大的文件大小,例如 65536 是 64MB
set the Max file length in the web.config file Change the "?" to a file size that you want to be your max, for example 65536 is 64MB
<configuration>
<system.web>
<httpRuntime maxRequestLength="?" />
</system.web>
</configuration>
您不能将文件添加到模型中,它将在它自己的字段中,而不是模型的一部分
You can't add the file to the model, it will be in it's own field not part of the model
<input name="videoUpload" type="file" />
您的操作不正确.它需要接受文件作为它自己的参数(或者如果多个使用 IEnumerable
作为参数类型)
Your action is incorrect. It needs to accept the file as it's own parameter (or if multiple use IEnumerable<HttpPostedFileBase>
as the parameter type)
[HttpPost]
public ActionResult Create(VideoUploadModel VM, HttpPostedFileBase videoUpload)
{
if (ModelState.IsValid)
{
if(videoUpload != null) { // save the file
var serverPath = server.MapPath("~/files/" + newName);
videoUpload.SaveAs(serverPath);
}
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.UserId = new SelectList(db.DBUsers, "Id", "FName", VM.videoModel.UserId);
return View(VM);
}
如果您允许选择多个文件,则必须允许这样做
If you were allowing multiple files to be selected you have to allow for that
[HttpPost]
public ActionResult Create(VideoUploadModel VM, IEnumerable<HttpPostedFileBase> videoUpload)
{
if (ModelState.IsValid)
{
if(videoUpload != null) { // save the file
foreach(var file in videoUpload) {
var serverPath = server.MapPath("~/files/" + file.Name);
file.SaveAs(serverPath);
}
}
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.UserId = new SelectList(db.DBUsers, "Id", "FName", VM.videoModel.UserId);
return View(VM);
}
这篇关于ASP MVC 文件上传 HttpPostedFileBase 为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:ASP MVC 文件上传 HttpPostedFileBase 为空


- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- 输入按键事件处理程序 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01