2

私の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データの受信を同時に行うことはできますか?

PSアップロードファイルアップロードのファイル名とコントローラメソッドのパラメータが同じ!

4

3 に答える 3

2

これは、フォームで提供されたものと一致するのではuploadFileなく、アクションのパラメーターに名前を付ける必要があるためです。次に、選択したファイルが使用可能になります。filesid

于 2013-10-09T12:28:23.307 に答える
2

間違ったオーバーロードされたバージョンを使用していると思いますBeginForm

その代わり

Html.BeginForm(null, null, FormMethod.Post, new { ReturnUrl = ViewBag.ReturnUrl, enctype = "multipart/form-data" })
于 2013-10-09T12:47:02.067 に答える