HttpPostedFileBase всегда возвращает нуль при публикации с моделью, но работает без модели - PullRequest
0 голосов
/ 13 декабря 2018

Я уже перепробовал все решения, которые нашел в StackOverflow, но они не работают для меня.Я также пробовал решение Tetsuya Yamamoto, но оно все равно всегда возвращает null, когда я использую его с моделью.

Обновление

Когда я проверяю его, тогда мой тип файлавходные данные хранятся, но в проверяемом элементе его значение равно ""

enter image description here

В обоих случаях мой опубликованный файл выглядит так:

 @using (Html.BeginForm("AddLocation", "MasterData", FormMethod.Post, new { encytype = "multipart/form-data"}))
{
 <div class="file-upload">
          <input type="file" name="postedFile" />
   </div>

//passing model value when using it
}

без модели рабочего совершенства

 public ActionResult AddLocation(HttpPostedFileBase file)
        {
            try
            {

              if (file != null) //Working Perfact
               {

               }              
                return View(model);
            }
            catch (Exception ex)
            {
                return View(model);
                throw;
            }

        }

с моделью всегда повторного запуска null

public ActionResult AddLocation(LocationModel model, HttpPostedFileBase file)
        {
            try
            {
                if (ModelState.IsValid)
                {                    
                    if (file != null) //Always return null when passing with model
                    {

                    }
                }
                return View(model);
            }
            catch (Exception ex)
            {
                return View(model);
                throw;
            }

        }

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Просто добавьте свойство HttpPostedFileBase внутри класса viewmodel, имя которого совпадает с именем элемента <input type="file" />:

public class LocationModel
{
    // other properties
    public HttpPostedFileBase PostedFile { get; set; }
}

Затем удалите второй параметр из действия контроллера:

[HttpPost]
public ActionResult AddLocation(LocationModel model)
{
    // do something
}

И замените элемент <input> на строго типизированную привязку:

@Html.TextBoxFor(model => model.PostedFile, new { type = "file" })

После этого ваш файл должен быть доступен в соответствующем свойстве viewmodel.

Примечание:

В определении формы имеется опечатка, в которой следует использовать enctype вместо encytype:

@model LocationModel

@using (Html.BeginForm("AddLocation", "MasterData", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div class="file-upload">
        @Html.TextBoxFor(model => model.PostedFile, new { type = "file" })
    </div>
}

Ссылка:

Файл загрузки MVCс моделью - второй опубликованный параметр имеет значение null

0 голосов
/ 13 декабря 2018

@ ArunPratap, эта проблема довольно известна в asp.net mvc, фактически метод POST получает файл, имя которого совпадает с данным именем Id в представлении, поскольку данные формы отправляются через заголовки и по умолчаниюпринимает все, что приходит из формы, но когда вы отправляете несколько данных, соответствующему методу POST требуется то же имя, что и для идентификации данных, поступающих из формы.

Пример в этом случае:

@using(Html.BeginForm("AddLocation", "MasterData", FormMethod.Post, new {enctype = "multipart/form-data" }))
{
    <div class="file-upload">
        @Html.TextBoxFor(model => model.PostedFile, new { type = "file" })
    </div>
}

Независимо от того, что вы называете параметром метода POST, он идентифицирует его как файл, но когда расширяет форму / модель другими полями, ему не хватает возможности обнаружить файл вокруг.Для передового опыта используйте строго типизированные ViewModels, как рекомендовано @TetsuyaYamamoto.

0 голосов
/ 13 декабря 2018

Вы можете добавить файл HttpPostedFileBase в сторону модели, и он должен получить файл.

public class LocationModel 
{
    ....
    public HttpPostedFileBase File{ get; set; }
}

Причина в том, что несколько параметров записи не поддерживаются в asp.net mvc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...