Я использую ядро Asp. net, кодирующее веб-приложение, раньше я пытался редактировать элемент с помощью функции редактирования по умолчанию в контроллере без проблем.
недавно я изменил нечетное поле в списке в представлении индекса на список выбора вместо обычного представления.
после этого, когда я попытался отредактировать необработанный текст, он открыл редактирование Затем, когда я нажал кнопку «Сохранить», появилось сообщение об ошибке (« InvalidCastException: невозможно преобразовать объект типа« System.Int32 »в тип« System.String '.").
Кнопка Сохранить в представлении редактирования:
'' '
<div class="form-group">
<input type="submit" value="Save" class="btn btn-default" />
</div>
GET Функция редактирования:
' ' '
public async Task<IActionResult> Edit(int? id)
{
List<Status> StatusList = _context.Status.ToList();
ViewData["StatusList"] = new SelectList(StatusList, "STID", "Name");
if (id == null)
{
return NotFound();
}
var bugsSummary = await _context.BugsSummary.SingleOrDefaultAsync(m => m.Id == id);
if (bugsSummary == null)
{
return NotFound();
}
ViewData["UserId"] = new SelectList(_context.Users, "Id", "Id", bugsSummary.UserId);
ViewData["ProjectsPId"] = new SelectList(_context.Projects, "PId", "PName", bugsSummary.ProjectsPId);
return View(bugsSummary);
}
' ''
Я установил точку останова в функции редактирования сообщения, она не входит в редактирование сообщения.
Я пытался отправить статус ViewData в StatusList как (int, string), но класс SelectList не позволяет.
как я могу устранить ошибку InvalidCastException?
дополнительные вложения:
HTTP POST EDIT FUN C.
'' '
public async Task<IActionResult> Edit(int id,
[Bind("Id,ProjectsPId,Bug,BugSummary,TesterName,ImageUrl,StatusSTID")]
BugsSummary bugsSummary, IFormFile myfile)
{
if (id != bugsSummary.Id)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
//bugsSummary.ImageUrl = "";
bugsSummary.ImageUrl = await UserFile.UploadeNewImageAsync(bugsSummary.ImageUrl,
myfile, _environment.WebRootPath, Properties.Resources.ImgFolder, 100, 100);
bugsSummary.PublicationDate = DateTime.Today.Date;
bugsSummary.UserId = _userManager.GetUserId(User);
_context.Update(bugsSummary);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!BugsSummaryExists(bugsSummary.Id))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
ViewData["UserId"] = new SelectList(_context.Users, "Id", "Id", bugsSummary.UserId);
ViewData["ProjectsPId"] = new SelectList(_context.Projects, "PId", "PName", bugsSummary.ProjectsPId);
return View(bugsSummary);
}
' ''
Форма:
'' '
<form asp-action="Edit" enctype="multipart/form-data">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="Id" />
<div class="form-group">
<label asp-for="ProjectsPId" class="control-label"></label>
<input asp-for="ProjectsPId" class="form-control" />
<span asp-validation-for="ProjectsPId" class="text-danger"></span>
</div>
<input type="hidden" asp-for="UserId" />
<div class="form-group">
<label asp-for="Bug" class="control-label"></label>
<input asp-for="Bug" class="form-control" />
<span asp-validation-for="Bug" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="BugSummary" class="control-label"></label>
<input asp-for="BugSummary" class="form-control" />
<span asp-validation-for="BugSummary" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="TesterName" class="control-label"></label>
<input asp-for="TesterName" class="form-control" />
<span asp-validation-for="TesterName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="ImageUrl" class="control-label"></label>
<img src="@Url.Content("~/" + AkelTestingTool.Properties.Resources.ImgFolder + "/" + Model.ImageUrl)" width="150" height="90" />
<input type="file" name="myfile" id="file" accept=".png,.jpg,.jpeg,.gif,.tif" class="btn btn-default" />
<input asp-for="ImageUrl" class="form-control" />
<span asp-validation-for="ImageUrl" class="text-danger"></span>
</div>
<label asp-for="Status.Name" class="control-label"></label>
@foreach (Microsoft.AspNetCore.Mvc.Rendering.SelectListItem status in ViewBag.StatusList as Microsoft.AspNetCore.Mvc.Rendering.SelectList)
{
if (int.Parse(status.Value) == Model.StatusSTID)
{
status.Selected = true;
}
else
{
status.Selected = false;
}
}
<div class="from-group">
<select asp-for="Status.Name" asp-items="@(ViewBag.StatusList)"></select>
@* <select asp-for="StatusSTID" asp-items="ViewBag.StatusList","Name" ></select> *@
<span asp-validation-for="Status.Name" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</form>
'' '