MVC Core 3.1 ForEach на представлении не обновляет значения на контроллере - PullRequest
0 голосов
/ 03 февраля 2020

Пожалуйста, кто-нибудь может посоветовать, как я ходил кругами с этим. У меня есть модель представления, которая содержит список моей сущности:

public List<Employee> EmployeeList{ get; set; }

Это заполняется так:

 var list = _context.Employees.Include(x => x.Office).Where(x => x.EmployeeID== id).ToList();

        var model = new EmployeeViewModel()
        {
            EmployeeList= list                       

        };

Представление содержит:

   @model MyProject.Models.EmployeeViewModel
    @{
        ViewData["Title"] = "Form";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }

     @foreach (var item in Model.EmployeeList)
        {

    @Html.HiddenFor(modelItem => item.EmployeeID)
    @Html.EditorFor(modelItem => item.Name) 
        }

    @using (Html.BeginForm("MyForm", "Employees", FormMethod.Post))
    {

        <button type="submit" class="btn btn-info" name="SubmitAction" value="Submit">Update</button>
    }

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

      switch (submitAction)
            {
                case "Submit":
                    {

                        foreach (var Response in model.EmployeeList)
                        {
                            Console.WriteLine(Response);
                        }


                        return View(model);
                    }



            }

Может кто-нибудь указать мне правильное направление?

Большое спасибо

1 Ответ

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

Переместить код foreach в @using (Html .BeginForm) внутри

EDITED

Index.cs html

<form method="post" asp-controller="Employee" asp-action="Index">
     @foreach (var item in Model.EmployeeList)
     {
          <input type="hidden" asp-for="item.EmployeeID" />
          <input type="text" asp-for="item.Name" />
     }
     <button type="submit" class="btn btn-info" name="SubmitAction" value="Submit">Update</button>
</form>

EmployeeController.cs

[HttpPost]
public IActionResult Index(Employee emp)
{
     return View();
}

отредактировано 05 февраля 2020 года

enter image description here

Изменить значение foreach на l oop.

<form method="post" asp-action="Index">
@{
    for (int i = 0; i <= Model.Count() - 1; i++)
    {
        <input type="hidden" asp-for="@Model[i].Id" />
        <input type="text" asp-for="@Model[i].Name" />
        <input type="text" asp-for="@Model[i].EmailAddress" />
        <br /><br />
    }
}
<button>Save</button>
</form>

enter image description here

Введите адрес электронной почты.

enter image description here

enter image description here

В вашем случае используйте @ Model.EmployeeList [i] .EmployeeID в поле зрения. и используйте параметр Employee в вашем контроллере.

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