Keri sisuni

Ripploendite loomine

Kui tutvume Visual Studio loodud kontrollerite ja vaadetega, hakkab meile silma, et vaadetes puuduvad ripploendid. Ripploendite eest peame seega ise hoolt kandma.

ViewBag

ASP.NET Core võimaldab meil viia vaadetesse täiendavaid andmeid, mis ei kuulu mudeliks oleva klassi koosseisu. Selleks kasutatakse kontrolleri ViewBag omadust. Oletame, et meil on kontroller, kus soovime näidata tellijate ripploendit. Me kasutame kontrolleri ViewBag-i, et anda lisamise vaatesse kaasa tellijate loend.

Tellijate loendi loomisel on üks trikk - me peame looma loendi SelectListItem tüüpi objektidest, sest neid objekte oskab ASP.NET Core siduda ripploendite külge, mida kasutajatele kuvatakse.

public class ProjectsController : Controller
{
    private readonly ApplicationDbContext _dbContext;

    public ProjectController(ApplicationDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    // ...

    [HttpGet]
    public async Task<IActionResult> Create()
    {
        var model = new Project();

        ViewBag.Customers = await _dbContext.Customers
                                            .OrderBy(customer => customer.Name)
                                            .Select(customer => new SelectLIstItem {
                                                Value = customer.Id.ToString(),
                                                Text = customer.Name
                                            })
                                            .ToListAsync();

        return View(model);
    }

    [HttpPost]
    public async Task<IActionResult> Create(Project model)
    {
        if(!ModelState.IsValid)
        {      
            ViewBag.Customers = await _dbContext.Customers
                                                .OrderBy(customer => customer.Name)
                                                .Select(customer => new SelectLIstItem {
                                                    Value = customer.Id.ToString(),
                                                    Text = customer.Name
                                                })
                                                .ToListAsync();
            return View(model);
        }

        // ... Salvestamise kood

        return RedirectToAction(nameof(Index));
    }

    // ...
}

Ripploendi lisamine vaatesse

Vaatesse saame tellijate ripploendi lisada järgnevalt.

<div class="form-group">
    <label asp-for="CustomerId" class="control-label"></label>
    <select asp-for="CustomerId" asp-items="@ViewBag.Customers" class="form-control">
    </select>
    <span asp-validation-for="CustomerId" class="text-danger"></span>
</div>