Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

Открытые методы действий

Единственное отличие между открытыми методами действий в этом контроллере и аналогичными методами в

CarsDalController
связано с доступом к данным, а также с тем,что все методы определены как асинхронные. Поскольку вы уже понимаете, для чего предназначено то или иное действие, ниже приведены остальные методы, изменения в которых выделены полужирным:

[Route("/[controller]")]

[Route("/[controller]/[action]")]

public async Task<IActionResult> Index

=> View(await _serviceWrapper.GetCarsAsync);

[HttpGet("{makeId}/{makeName}")]

public async Task<IActionResult> ByMake(int makeId, string makeName)

{

ViewBag.MakeName = makeName;

return View(await _serviceWrapper.GetCarsByMakeAsync(makeId));

}

[HttpGet("{id?}")]

public async Task<IActionResult> Details(int? id)

{

if (!id.HasValue)

{

return BadRequest;

}

var car = await GetOneCarAsync(id);

if (car == null)

{

return NotFound;

}

return View(car);

}

[HttpGet]

public async Task<IActionResult> Create

{

ViewData["MakeId"] = await GetMakesAsync;

return View;

}

[HttpPost]

[ValidateAntiForgeryToken]

public async Task<IActionResult> Create(Car car)

{

if (ModelState.IsValid)

{

await _serviceWrapper.AddCarAsync(car);

return RedirectToAction(nameof(Index));

}

ViewData["MakeId"] = await GetMakesAsync;

return View(car);

}

[HttpGet("{id?}")]

public async Task<IActionResult> Edit(int? id)

{

var car = await GetOneCarAsync(id);

if (car == null)

{

return NotFound;

}

ViewData["MakeId"] = await GetMakesAsync;

return View(car);

}

[HttpPost("{id}")]

[ValidateAntiForgeryToken]

public async Task<IActionResult> Edit(int id, Car car)

{

if (id != car.Id)

{

return BadRequest;

}

if (ModelState.IsValid)

{

await _serviceWrapper.UpdateCarAsync(id,car);

return RedirectToAction(nameof(Index));

}

ViewData["MakeId"] = await GetMakesAsync;

return View(car);

}

[HttpGet("{id?}")]

public async Task<IActionResult> Delete(int? id)

{

var car = await GetOneCarAsync(id);

if (car == null)

{

return NotFound;

}

return View(car);

}

[HttpPost("{id}")]

[ValidateAntiForgeryToken]

public async Task<IActionResult> Delete(int id, Car car)

{

await _serviceWrapper.DeleteCarAsync(id,car);

return RedirectToAction(nameof(Index));

}

Обновление

компонента представления

В текущий момент внутри компонента представления

MenuViewComponent
применяется уровень доступа к данным и синхронная версия
Invoke
. Внесите в класс следующие изменения:

using System.Linq;

using System.Threading.Tasks;

using AutoLot.Dal.Repos.Interfaces;

using AutoLot.Services.ApiWrapper;

using Microsoft.AspNetCore.Mvc;

using Microsoft.AspNetCore.Mvc.ViewComponents;

namespace AutoLot.Mvc.ViewComponents

{

public class MenuViewComponent : ViewComponent

{

private readonly IApiServiceWrapper _serviceWrapper;

public MenuViewComponent(IApiServiceWrapper serviceWrapper)

{

_serviceWrapper = serviceWrapper;

}

public async Task<IViewComponentResult> InvokeAsync

{

Поделиться с друзьями: