我正在编写一个MVC 5 Web应用程序来更新博客文章。我想让用户上传视频到内容文件夹,然后将文件名以字符串形式存储在数据库中。但是,我似乎缺少一个关键部分。
我有一个更新帖子的方法,除了视频部分之外都有效。
我已经创建了一个视频类,其中有一个属性。
使用
您如何将视频文件与在视图中设置的所有其他文本数据(例如
我有一个更新帖子的方法,除了视频部分之外都有效。
public ActionResult Update(int? id, string title, string body, DateTime dateTime, string tags, Video video)
{
if (!IsAdmin)
{
return RedirectToAction("Index");
}
var post = GetPost(id); // get the post object
post.Title = title;
post.Body = body;
post.DateTime = dateTime;
post.Tags.Clear();
post.VideoFileName = UploadVideo(video);
我已经创建了一个视频类,其中有一个属性。
public class Video
{
public HttpPostedFileBase File { get; set; }
}
接下来,在与 Update
方法同一类中编写一个方法,用于上传视频并返回文件名。
[HttpPost]
public string UploadVideo(Video video)
{
if (video.File.ContentLength <= 0) return null;
var fileName = Path.GetFileName(video.File.FileName);
if (fileName == null) return null;
var path = Path.Combine(Server.MapPath("~/Content/Videos"), fileName);
video.File.SaveAs(path);
return fileName;
}
我有一个用于更新方法的视图,但我不知道如何将视频对象从此视图传递到更新方法中,以便我可以将其传递给UploadVideo
方法。
<form action="@Href("~/Posts/Update")" method="post" id="postForm">
@if(Model.Id != -1)
{
<input type="hidden" name="id" value="@Model.Id"/>
}
@{ var dateTime = Model.DateTime.Year > 2000 ? Model.DateTime : DateTime.Now; }
<input type="text" name="dateTime" value="@dateTime "/> Date<br />
<input type="text" name="title" value="@Model.Title " /> Title<br />
<input type="text" name="tags" value="@ViewBag.Tags " /> Tags<br />
<textarea name="body" rows="10" cols="80">@Model.Body</textarea><br />
<br/>
<br/>
<input type="file" name="video" />
<br/>
<br/>
<input type="submit" name="submit" value="Submit" />
</form>
使用
<input type="file" name="video" />
会导致在传递到更新方法时,视频对象为空。您如何将视频文件与在视图中设置的所有其他文本数据(例如
dateTime
,title
,tags
和 body
)一起传递到更新方法中?
enctype
,但是您如何使用 HttpContext 捕获视频文件? - Jonathan KittellSystem.Web.HttpContext.Current.Request.Files
,在类文件顶部添加using System.Web
无法正常工作。 - Jonathan KittellRequest.Files
,我为你添加了代码片段。 - Koti Panga