Передача списка класса модели из представления в контроллер в Asp .NetCore - PullRequest
0 голосов
/ 05 февраля 2020

В настоящее время я пытаюсь опубликовать список ModelClass (FileInfo) на моем контроллере, но отправка, кажется, вообще не вызывает контроллер, даже когда я отлаживаюсь, процесс не входит в действие моего контроллера, ниже мой код просмотра (претензииdocumentform.cs html),

@model IList<PIBSSBus.DomainModels.FileInfo>


 <form method="POST" enctype="multipart/form-data">

          <table class="table table-striped table-hover table-bordered" id="sample_editable_1">

                                       <thead>

                                            <tr>

                                                <th> Document</th>

                                                <th> Submitted </th>

                                                <th> Date Submitted </th>

                                                <th> # </th>
                                            </tr>
                                        </thead>
                                        <tbody>

                                            <tr>
                                                <td> <input type="text" placeholder="title" asp-for="@Model[0].Title" value="enter">  </td>
                                                <td><input type="text" placeholder="Description" asp-for="@Model[0].Description" value="enter1"> </td>
                                                <td>  </td>

                                                <td>
                                                    <input type="file" class="" asp-for="@Model[0].File"  value="Upload">
                                                </td>
                                            </tr> 
                                            <tr>
                                                <td> <input type="text" placeholder="title" asp-for="@Model[1].Title" value="enter2"> </td>
                                                <td><input type="text" placeholder="Description" asp-for="@Model[1].Description" value="enter3"> </td>
                                                <td>  </td>

                                                <td>
                                                    <input type="file" class="" asp-for="@Model[1].File" value="Upload">
                                                </td>
                                            </tr> 

                                           @* @Html.AntiForgeryToken();*@
                                        </tbody>
                                    </table>'
<button type="submit" asp-controller="Claims" asp-action="Wazobia" class="btn green button-submit">
    Submit
    <i class="fa fa-check"></i>
</button>
</form>

Это мой контроллер

 public IActionResult claimdocumentform()
    {
        //PIBSSBus.DomainModels.FileInfo something = new PIBSSBus.DomainModels.FileInfo();
       // IList<PIBSSBus.DomainModels.FileInfo> filess =new List<PIBSSBus.DomainModels.FileInfo>();
        return View();
    }
  //  [ValidateAntiForgeryToken]
    [HttpPost]
    public IActionResult Wazobia(IList<PIBSSBus.DomainModels.FileInfo> fam)
    {

        return View();
    }

это мой класс модели

public class FileInfo
{

    public string Title { get; set; }


    public string Description { get; set; }


    [DataType(DataType.Upload)]
    public IFormFile File { get; set; }
}

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

1 Ответ

1 голос
/ 07 февраля 2020

Сначала я протестировал код в asp. net core 3.0, и он хорошо работает (вы также можете попробовать это). Затем я попытался в asp. net core 2.2 MVC, и он не работает как у вас.

Затем я обнаружил, что это ошибка в asp. net core 2.2 и исправлено в asp. net core 3.0, см. https://github.com/dotnet/core/issues/2523#issuecomment -481120637

Обходной прием - получение файлов за пределами модели

public class FileInfoVM
{
    public string Title { get; set; }
    public string Description { get; set; }
}

public class FileInfo
{
    public string Title { get; set; }
    public string Description { get; set; }
    public IFormFile File { get; set; }
}

Просмотр:

<tbody>

    <tr>
        <td> <input type="text" placeholder="title" asp-for="@Model[0].Title"  value="enter">  </td>
        <td><input type="text" placeholder="Description" asp-for="@Model[0].Description"  value="enter1"> </td>
        <td>  </td>

        <td>
            <input type="file" class=""  name="Files">
        </td>
    </tr>
    <tr>
        <td> <input type="text" placeholder="title" asp-for="@Model[1].Title"  value="enter2"> </td>
        <td><input type="text" placeholder="Description" asp-for="@Model[1].Description" value="enter3"> </td>
        <td>  </td>

        <td>
            <input type="file" class=""  name="Files">
        </td>
    </tr>


</tbody>

Действие ;

[ValidateAntiForgeryToken]
[HttpPost]
public IActionResult Wazobia(IList<PIBSSBus.DomainModels.FileInfoVM> fam,List<IFormFile> Files)
    {
        List<FileInfo> fileInfos = new List<FileInfo>();
        for(int i= 0; i< Files.Count; i++)
        {
            fileInfos.Add(new FileInfo()
            {
                Title = fam[i].Title,
                Description = fam[i].Description,
                File = Files[i]
            });
        }
        // save fileInfos 
        return View();
    }
...