Есть ли способ отправить SelectList в данных представления с помощью int & string (в функции Edit)? - PullRequest
0 голосов
/ 13 января 2020

Я использую ядро ​​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>

'' '

...