Asp.net core 2.1 - два аргумента HttpPost из формы - PullRequest
0 голосов
/ 21 декабря 2018

возможно ли передать два аргумента в один метод контроллера [httpPost]?Я хотел бы передать модель и файл.Для прохождения модели я использую:

CS    
public async Task<IActionResult> Create([Bind("prop1,prop2,prop3")] SomeModel model)

HTMLCS
<form asp-action="Create">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="prop1" class="control-label"></label>
            <select asp-for="prop1" class ="form-control" asp-items="ViewBag.prop1"></select>
        </div>
        <div class="form-group">
             <label asp-for="prop2" class="control-label"></label>
            <input asp-for="prop2" class="form-control" />
            <span asp-validation-for="prop3" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="prop3" class="control-label"></label>
            <input asp-for="prop3" class="form-control" />
            <span asp-validation-for="prop3" class="text-danger"></span>
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </form>

И это хорошо работает.Но я бы тоже хотел опубликовать файл.Поэтому я создал вход

<label asp-for="FileName" class="control-label"></label>
<input type="file" asp-for="FileName" name="FileName"/>

И изменил мой метод в контроллере

public async Task<IActionResult> Create([Bind("prop1,prop2,prop3")] SomeModel model, IFormFile FileName)

Но он говорит, что SomeModel не содержит определения для FileName: (

РЕДАКТИРОВАТЬ: в соответствии с https://docs.microsoft.com/pl-pl/aspnet/core/mvc/models/file-uploads?view=aspnetcore-2.2

Если ваш контроллер принимает загруженные файлы с использованием IFormFile, но вы обнаружите, что значение всегда равно null, убедитесь, что в вашей HTML-форме указано значение enctype для multipart / form-data. Если этот атрибут не установлен для элемента, загрузка файла не произойдет, и любые связанные аргументы IFormFile будут нулевыми.

1 Ответ

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

Проблема в следующих строках:

<label asp-for="FileName" class="control-label"></label>
<input type="file" asp-for="FileName" name="FileName"/>

Вы используете строго тип label и input элемент управления для файла, но ваш класс модели не содержит никакого свойства с именем FileName.

Запишите свой label и input элемент управления для FileName следующим образом:

<label for="FileName" class="control-label">FileName</label>
<input type="file" name="FileName"/>

Тогда ваш form должен содержать атрибут enctype="multipart/form-data" следующим образом:

<form asp-action="Create" method="post" enctype="multipart/form-data">
    // Here is your input fields
</form>

Теперь все должно работать нормально, и ваш параметр IFormFile FileName будет иметь выбранный файл в сообщении.

...