Как использовать asp-for, чтобы получить значение от модели и установить значение для другой модели?

Я пытаюсь создать одно представление, которое включает все (создание, редактирование, удаление и индексирование) в одном представлении, которое является индексом.

Проблема с редактированием. Всегда возвращает контроллеру null, как показано на гифке.

Я знаю, в чем проблема, но не могу ее решить. Объяснение в конце вопроса после строки hr

введите описание изображения здесь

У меня есть Model и ViewModel следующим образом.

Категория начальной загрузки модели

public class BootstrapCategory
{
    [Key]
    public Guid Id { get; set; }

    [MaxLength(20)]
    [Required]
    public string Category { get; set; }
}

ViewModel VMBPCategoris

public class VMBPCategoris
{
    public List<BootstrapCategory> bootstrapCategories { get; set; }

    public Guid Id { get; set; }
    public string Category { get; set; }
}

Обзор

Примечание: редактировать не обычной кнопкой в ​​таблице, а другой кнопкой, как показано на гифке.

@model VMBPCategoris

        @foreach (var item in Model.bootstrapCategories)
        {
            <tr>
                <td>

                    <form asp-action="Edit" method="post">
                        <input type="hidden" asp-for="@item.Id" />
                        <div class="@item.Id d-none">
                            <div class="input-group">
                                <input id="btnGroupEdit" type="submit" value="Save" class="input-group-text btn btn-primary" />
                                <input asp-for="@item.Category" class="form-control" aria-label="Input group example" aria-describedby="btnGroupEdit">
                            </div>
                            <span asp-validation-for="@item.Category" class="text-danger"></span>
                        </div>
                    </form>

                    <div class="@item.Id">
                        @Html.DisplayFor(modelItem => item.Category)
                    </div>

                </td>
                <td>
                    <a href="@item.Id" class="ToggleEdit">Edit</a> |
                    <a asp-action="Details" asp-route-id="@item.Id">Details</a> |
                    <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
                </td>
            </tr>
        }

Контроллер

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit([Bind("Id,Category")] BootstrapCategory bootstrapCategory)
{

    _context.Update(bootstrapCategory);
    await _context.SaveChangesAsync();

    return RedirectToAction(nameof(Index));
    //return View(vMBPCategoris);
}

В ViewModel VMBPCategoris

Проблема, я получаю список значений категории из этого списка

 public List<BootstrapCategory>bootstrapCategories { get; set; }

при редактировании я устанавливаю новое значение для одного члена в списке, а не для этого

 public Guid Id { get; set; }
 public string Category { get; set; }

Так что он возвращает Null

Однако, если я изменю [email protected] на
asp-for = Category, ввод получит пустое значение, но не вернет отредактированное значение. пустой

** Вот мой вопрос ›› Могу ли я использовать asp-for, чтобы получить выгоду от

  public List<BootstrapCategory> bootstrapCategories { get; set; }

и установите значение

  public Guid Id { get; set; }
  public string Category { get; set; }

Поскольку
использование [email protected] полезно для получения значений категорий, но не для установки значения.
И использование asp-for = Category < / strong> полезно для установки значения категории, но не для получения значения.


person MOHAMED ABUELATTA    schedule 16.06.2021    source источник


Ответы (1)


Наконец, я нашел очень простое решение.

чтобы получить значения, которые я использовал

value="@item.Category"

и чтобы установить значение, которое я использовал

asp-for="Category"

Вот и все ...

<input asp-for="Category" value="@item.Category" class="form-control">

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

person MOHAMED ABUELATTA    schedule 16.06.2021