forms - 在 MVC4 中上传,在我的操作中有 2 个参数但文件为空

标签 forms file-upload upload asp.net-mvc-4 httppostedfilebase

我正在尝试将文件上传到目录。以下代码对我有用

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/

相关文章:

PHP 图片上传 MySQL

php - 在 Laravel 4 中上传多个文件

CSS 表单样式

javascript - 单击另一行编辑时启用表单

html - 背景位置

c# - 读取使用 FileUpload 控件上传的 Excel 文件而不将其保存在服务器上

javascript - 将文件从输入传输到 iframe JavaScript

node.js - Node.js中的图片上传

ruby-on-rails - 字符串的未定义方法 `original_filename'

javascript - 即使必填字段无效, Angular 表单验证也允许提交