asp. net Razor Pages Импорт изображений - PullRequest
0 голосов
/ 26 февраля 2020

Я получил следующий код в файле .cs html:

<tr>
   <td class="registerWidth"><b>Image:</b></td>
   <td>
      @Html.TextBoxFor(m => m.File, new { type = "file", accept="image/*" })
      @Html.ValidationMessageFor(m => m.File, "", new { @class = "redColor" })
   </td>
</tr>

Это в моей ViewModel:

  public Image File { get; set; }

(Изображение из System.Drawing)

Проблема в том, что файл в контроллере каждый раз равен нулю.

 public ActionResult Contact(ContactViewModel data)
        {
            var Image = data.File //data.File is null
        }

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Как вы указали в своем комментарии, вы используете Html.Beginform("Contact", "Home", FormMethod.Post

Однако могу ли я предложить следующее, так как при отправке изображений в методы контроллера он, кажется, работает нормально.

 @using ("Contact", "Home", FormMethod.Post, new {enctype = "multipart/form-data"})
 {
     // form things blah blah blag

     // When it comes to inputting the image file, I suggest you do the following
     // Instead of this @Html.TextBoxFor(m => m.File, new { type = "file", accept="image/*" })

    // Have
    <input type="file" name="file" id="fileUpload" accept=".png, .jpg, .jpeg"/>
 }

Тогда вы будете использовать метод контроллера, чтобы отразить эти изменения:

public ActionResult Contact(ContactViewModel model, HttpPostedFileBase file)
{
    var Image = file.FileName;
}

Так что же мы здесь делаем?

Мы создаем форму, подобную той, которую вы делали раньше, но мы добавляем дополнительный параметр, который определяет, как форма должна кодироваться при передаче ее в контроллер.

<input type="file" name="file" id="fileUpload" accept=".png, .jpg, .jpeg"/>

Здесь мы говорим, что будет вход с именем 'file', который может принимать png, jpg или JPEG изображения.

HttpPostedFileBase file

Это файл, который мы будем передавать. name должно совпадать с именем name во входных тегах

0 голосов
/ 26 февраля 2020

В вашем ViewModel вам нужно изменить тип с Image на HttpPostedFileBase:

public HttpPostedFileBase File { get; set; }

И ваш Controller:

[HttpPost]
public ActionResult Contact(ContactViewModel data)
{
   var Image = data.File //data.File is null
}

И ваш Form должно выглядеть так:

@Html.Beginform("Contact", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })
...