none
HttpPostFileBase всегда null RRS feed

  • Вопрос

  • Коллеги, прошу помощи. Только начинаю разрабатывать под веб и MVC.

    Столкнулся с такой проблемой. Необходимо загрузить файл на сервер. Делаю все, как сказано в мануале.

    Разметка:

    @using System.Web.Mvc.Html
    @model Cezar.Content.MediaItems
        ViewBag.Title = "Create";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
    
    <h2>Create</h2>
    as
    
    @using (Html.BeginForm("Create","MediaItems", FormMethod.Post,new {enctype = "multypart/form*data"})) 
    {
        @Html.AntiForgeryToken()
        
        <div class="form-horizontal">
            <h4>MediaItems</h4>
            <hr />
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            <div class="form-group">
                @Html.LabelFor(model => model.MediaName, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.MediaName, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.MediaName, "", new { @class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(model => model.MediaType, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.MediaType, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.MediaType, "", new { @class = "text-danger" })
                </div>
            </div>
    @*Тут я вставил контрол для выбора имени файла, как по мануалу*@
            <div class="form-group">
                <input type="file" name="imageFile" /><br />  
            </div>
          
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
            </div>
        </div>
    }
    
    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>
    
    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }
    


    На стороне контроллера имею код:

    [HttpPost]
            [ValidateAntiForgeryToken]
            public async Task<ActionResult> Create([Bind(Include = "MediaID,MediaName,MediaType")] MediaItems mediaItems, HttpPostedFileBase imageFile)
            {
                if (ModelState.IsValid)
                {
                    mediaItems.MediaID = Guid.NewGuid();
                    if (imageFile != null && imageFile.ContentLength != 0)
                    {
                        var uris = await this.storage.UploadImage(//mediaItems.MediaID.ToString(), 
                            Guid.NewGuid().ToString(), imageFile.InputStream);
                        mediaItems.MediaLink = uris.Item1.ToString();
                        mediaItems.ThumbnailLink = uris.Item2.ToString();
                    }
    
                    db.MediaItems.Add(mediaItems);
                    await db.SaveChangesAsync();
    
                    return RedirectToAction("Index");
                }
    
                return View(mediaItems);
            }

    Имя в разметке для выбора файла - "imageFile", имя на контроллере - "imageFile". Пробовал менять имена, пробовал передавать через ViewBag... В общем все время у меня этот параметр равен null.

    Мне надо сделать простую загрузку. Кто может что посоветовать?

    23 июля 2016 г. 21:39

Ответы

  • Вопрос решен.

    Не знаю почему, но удалил весь код, контроллер и представления, создал новый контролер, вставил элемент Input, и контроллер получил ссылку на файл

    • Предложено в качестве ответа YatajgaEditor 25 июля 2016 г. 20:04
    • Помечено в качестве ответа YatajgaEditor 25 июля 2016 г. 20:04
    25 июля 2016 г. 5:52