Я пытаюсь создать одно представление, которое включает все (создание, редактирование, удаление и индексирование) в одном представлении, которое является индексом.
Проблема с редактированием. Всегда возвращает контроллеру 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> полезно для установки значения категории, но не для получения значения.