#c# #html #razor #asp.net-core-mvc
#c# #HTML #бритва #asp.net-core-mvc
Вопрос:
Мой индекс состоит из таблицы, в которой показаны все мои созданные вопросы (опрос). Но я хочу иметь возможность редактировать вопрос с помощью модального. Поэтому я создал следующий модальный метод в цикле foreach:
@foreach (var item in Model.Questions)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Id)
</td>
<td>
@Html.DisplayFor(modelItem => item.Question1)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReplyOptions)
</td>
<td>
@Html.DisplayFor(modelItem => item.Group)
</td>
<td>
@if (item.CategoryId != null)
{
@Html.DisplayFor(modelItem => item.Category.Name)
}
else
{
<i><font color="red">Nicht zugewiesen</font></i>
}
</td>
<td>
<!-- Button trigger modal -->
<button type="button" class="btn btn-sm" data-toggle="modal" data-target="#@item.Id">
Bearbeiten
</button>
<!-- Modal -->
<div class="modal fade" id="@item.Id" tabindex="-1" role="dialog" aria-labelledby="xxx" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">amp;times;</span>
</button>
<h2 class="modal-title" id="xxx">Frage bearbeiten</h2>
</div>
<div class="modal-body">
<form asp-action="Edit">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="@item.Id" />
<div class="form-group">
<label asp-for="@item.CategoryId" class="control-label"></label>
<select asp-for="@item.CategoryId" class="form-control" asp-items="ViewBag.CategoryId"></select>
<span asp-validation-for="@item.CategoryId" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="@item.Question1" class="control-label"></label>
<input asp-for="@item.Question1" class="form-control" />
<span asp-validation-for="@item.Question1" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="@item.ReplyOptions" class="control-label"></label>
<input asp-for="@item.ReplyOptions" class="form-control" />
<span asp-validation-for="@item.ReplyOptions" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="@item.Group" class="control-label"></label>
<input asp-for="@item.Group" class="form-control" />
<span asp-validation-for="@item.Group" class="text-danger"></span>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Save</button>
</div>
</form>
</div>
</div>
</div>
</div>
<a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
</td>
</tr>
}
Но у меня следующая проблема:
Когда я хочу отредактировать вопрос и нажать «Сохранить», мой метод редактирования в контроллере не получает значения.
Метод выглядит следующим образом:
Что мне нужно сделать, чтобы убедиться, что значения передаются?
Ответ №1:
Что мне нужно сделать, чтобы убедиться, что значения передаются?
Просто чтобы добавить атрибут name к каждому элементу управления в форме :
<div class="modal-body">
<form asp-action="Edit">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="@item.Id" name="Id" />
<div class="form-group">
<label asp-for="@item.CategoryId" class="control-label"></label>
<select asp-for="@item.CategoryId" class="form-control" asp-items="ViewBag.CategoryId" name="CategoryId"></select>
<span asp-validation-for="@item.CategoryId" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="@item.Question1" class="control-label"></label>
<input asp-for="@item.Question1" class="form-control" name="Question1" />
<span asp-validation-for="@item.Question1" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="@item.ReplyOptions" class="control-label"></label>
<input asp-for="@item.ReplyOptions" class="form-control" name="ReplyOptions" />
<span asp-validation-for="@item.ReplyOptions" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="@item.Group" class="control-label"></label>
<input asp-for="@item.Group" class="form-control" name="Group" />
<span asp-validation-for="@item.Group" class="text-danger"></span>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Save</button>
</div>
</form>
</div>
Комментарии:
1. Большое вам спасибо!! : D Но я хотел бы задать вам еще один вопрос: у меня также есть модал для создания вопроса, и там он также работает без атрибута «name». Зачем мне это нужно в этом случае?
2. @Toasty,
asp-for
автоматически сгенерируетname
атрибут, ключ лежит в форме атрибута name . Ваше исходное кодовое имя автоматически генерирует значениеitem.filedName
, ноQuestion
класс, принятый в действие, не имеетitem
внешнего поля, поэтому вам нужно добавить атрибут name, чтобы переопределить имя, автоматически сгенерированное asp-for . Случай, когда вы упомянули, что вы можете напрямую передавать данные, показывает, что имя, автоматически сгенерированное asp-for, согласуется со структурой классов, полученной в коде. Вы можете использовать F12 для просмотра отображаемого HTML-кода.