Roadmap › ASP.NET Core MVC (and Razor Pages) › Module: MVC Basics
Lessons in this course (15)

3. Controllers, actions and action results

Basic★ Must knowLesson 3 of 15
csharp
public class ProductsController(IProductService products) : Controller
{
    public async Task<IActionResult> Index() => View(await products.GetAllAsync());

    public async Task<IActionResult> Details(int id)
    {
        var p = await products.GetAsync(id);
        return p is null ? NotFound() : View(p);
    }

    [HttpGet] public IActionResult Create() => View();

    [HttpPost, ValidateAntiForgeryToken]
    public async Task<IActionResult> Create(ProductInput input)
    {
        if (!ModelState.IsValid) return View(input);           // redisplay with errors
        var id = await products.CreateAsync(input);
        TempData["Message"] = "Product created";
        return RedirectToAction(nameof(Details), new { id });   // Post-Redirect-Get
    }
}
ResultHelper
HTML viewView(), PartialView()
RedirectRedirect(), RedirectToAction(), RedirectToRoute(), LocalRedirect()
DataJson(), Content(), File(), Ok()
StatusNotFound(), BadRequest(), Unauthorized(), Forbid(), StatusCode(503)

Post-Redirect-Get (PRG) prevents duplicate form submissions on browser refresh.