Member 14615938 Ответов: 2

Удалить в ASP.NET core3


Deleting operations in the section is difficult

The third party insurance part is removed, but the body insurance part is not removed

And that I want to be returned to the screen Index with the InsuranceController after the removal operation, which doesn't happen


Что я уже пробовал:

// GET:Insurances/Delete/5
public async Task<IActionResult> Delete(int id, int type)
{
    InsuranceViewModel model;

    if ((InsuranceType)type == InsuranceType.Body)
    {
        var bodyInsurance = await _context.BodyInsurance
            .Include(e => e.InsuranceCompany)
            .FirstOrDefaultAsync(e => e.Id == id);
        if (bodyInsurance == null)
        {
            return NotFound();
        }

        model = new InsuranceViewModel
        {
            ExpireDate = bodyInsurance.ExpireDate,
            CompanyId = bodyInsurance.InsuranceCompanyId,
            CompanyName = bodyInsurance.InsuranceCompany.CompanyName,
            InsuranceType = InsuranceType.Body,
            IssueDate = bodyInsurance.IssueDate,
            VehicleInformationId = id
        };
    }
    else
    {
        var thirdParty = await _context.ThirdPartyInsurance
            .Include(e => e.InsuranceCompany)
            .FirstOrDefaultAsync(e => e.Id == id);
        if (thirdParty == null)
        {
            return NotFound();
        }

        model = new InsuranceViewModel
        {
            ExpireDate = thirdParty.ExpireDate,
            CompanyId = thirdParty.InsuranceCompanyId,
            CompanyName = thirdParty.InsuranceCompany.CompanyName,
            InsuranceType = InsuranceType.Thirdpart,
            IssueDate = thirdParty.IssueDate,
            VehicleInformationId = id
        };
    }
    return View(model);
}

// POST: Insurances/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id, int type)
{

    if ((InsuranceType)type == InsuranceType.Body)
    {

        var bodyInsurance = await _context.BodyInsurance.FindAsync(id);
        if (bodyInsurance == null)
        {
            return NotFound();
        }
        _context.BodyInsurance.Remove(bodyInsurance);
        await _context.SaveChangesAsync();



    }
    else
    {
        var thirdParty = await _context.ThirdPartyInsurance.FindAsync(id);
        if (thirdParty == null)
        {
            return NotFound();
        }
        _context.ThirdPartyInsurance.Remove(thirdParty);
        await _context.SaveChangesAsync();
    }

    return RedirectToAction("VehicleInformations", "Index");
}

2 Ответов

Рейтинг:
18

Richard Deeming

Цитата:
Я хочу, чтобы после операции удаления меня вернули в индекс экрана вместе со страховым контролером
...
return RedirectToAction("VehicleInformations", "Index");
То RedirectToAction метод[^] ожидает, что первый параметр будет действием, а второй - контроллером.

Вы сказали своему коду перенаправить на VehicleInformations действие на Index контроллер.

Если вы хотите перенаправить на Index действие в мире Insurance вместо этого измените свой код на:
return RedirectToAction("Index", "Insurance");
Если действие, на которое вы перенаправляете, находится в том же контроллере, что и текущее действие, вы можете упростить его до:
return RedirectToAction(nameof(Index));


Цитата:
Страховая часть третьей стороны удаляется, но страховая часть тела не удаляется
Это будет зависеть от ваших данных и от значений, которые вы отправляете обратно в действие. У нас нет доступа к вашей базе данных, поэтому мы не можем отладить проблему для вас.

Установите точку останова в первой строке таблицы. DeleteConfirmed метод, и шаг через него, чтобы убедиться, что параметры заполняются правильно, и что идентификатор ссылается на запись, которая существует в вашей базе данных.


Maciej Los

Хорошо объяснил!

Рейтинг:
10

Member 14615938

public async Task<IActionResult> Delete(int? id)
{
    if (id == null)
    {
        return NotFound();
    }

    var vehicleInformation = await _context.VehicleInformation
        .Include(v => v.DocumentStatus)
        .Include(v => v.Office)
        .Include(v => v.Unit)
        .Include(v => v.VehicleType)
        .FirstOrDefaultAsync(m => m.Id == id);
    if (vehicleInformation == null)
    {
        return NotFound();
    }

    var viewmodel = VehicleInformationViewModel.FromInformationVehicle(vehicleInformation, _context);
    return View(viewmodel);
}

// POST: VehicleInformations/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
    var vehicleInformation = await _context.VehicleInformation.FindAsync(id);
    _context.VehicleInformation.Remove(vehicleInformation);
    await _context.SaveChangesAsync();
    return RedirectToAction(nameof(Index));
}


CHill60

Я думаю, что вы хотели отправить это по адресу Asp.net ошибка core3: не все пути кода возвращают значение[^] и наоборот