Получение значения из выпадающего списка ViewBag в C# MVC - PullRequest
0 голосов
/ 06 августа 2020

У меня есть DropDownList с командами, который заполняется с помощью свойства Id группы. У каждой команды есть игроки, и моя задача - создать матч, где я могу выбрать команду из DropDownList, а также выбрать игроков для выбранной команды.

Вот изображение идеи

Match Model:

public class Match
{
    [Key,Column(Order = 0)]
    public int Id { get; set; }
    [Key,Column(Order = 1)]
    public int HostId { get; set; }
    public virtual Team Host { get; set; }
    [Key,Column(Order = 2)]
    public int GuestId { get; set; }
    public virtual Team Guest { get; set; }

    [DataType(DataType.DateTime)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy HH:mm}")]
    public DateTime MatchTime { get; set; }
    public string MatchPlace { get; set; }
    public IEnumerable<Result> Results { get; set; }
}

Match Controller (только действие CreateMatch):

    public IActionResult CreateMatch()
    {
        ViewBag.HostId = new SelectList(_context.Teams, "Id", "Name");
        ViewBag.GuestId = new SelectList(_context.Teams, "Id", "Name");
        return View();
    }

ViewBag содержит, например, HostId, который позволит мне получить доступ к базе данных для получения команд и командных игроков. Я не знаю, как получить доступ к значению ViewBag.

CreateMatch View:

@model FootballMatchesManager.Models.Match

@{
    ViewBag.Title = "Create";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Create</h2>


@using (Html.BeginForm("Save","Matches")) 
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>Match</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="container">
            <div class="row">
                <div class="col-sm">
                    <div class="form-group">
                        @Html.LabelFor(model => model.HostId, "Host", htmlAttributes: new { @class = "control-label col-md-2" })
                        <div class="col-md-10">
                            @Html.DropDownListFor(model => model.HostId, ViewBag.HostId as SelectList, "---Select Team---", new { @class = "form-control"})
                            @Html.ValidationMessageFor(model => model.HostId, "", new { @class = "text-danger" })
                        </div>
                    </div>
                </div>
                <div class="col-sm">
                    <div class="form-group">
                        @Html.LabelFor(model => model.MatchPlace, "Place", htmlAttributes: new { @class = "control-label col-md-2" })
                        <div class="col-md-10">
                            @Html.EditorFor(model => model.MatchPlace, new { htmlAttributes = new { @class = "form-control" } })
                            @Html.ValidationMessageFor(model => model.MatchPlace, "", new { @class = "text-danger" })
                        </div>
                    </div>

                    <div class="form-group">
                        @Html.LabelFor(model => model.MatchTime, "Time", htmlAttributes: new { @class = "control-label col-md-2" })
                        <div class="col-md-10">
                            @Html.EditorFor(model => model.MatchTime, new { htmlAttributes = new { @class = "form-control"} })
                            @Html.ValidationMessageFor(model => model.MatchTime, "", new { @class = "text-danger" })
                        </div>
                    </div>
                </div>
                <div class="col-sm">
                    <div class="form-group">
                        @Html.LabelFor(model => model.GuestId, "Guest", htmlAttributes: new { @class = "control-label col-md-2" })
                        <div class="col-md-10">
                            @Html.DropDownListFor(model => model.GuestId, ViewBag.GuestId as SelectList, "---Select Team---", new { @class = "form-control"})
                            @Html.ValidationMessageFor(model => model.GuestId, "", new { @class = "text-danger" })
                        </div>
                    </div>
                </div>
            </div>
            <div class="position-relative" style="top:200px;float:right">
                <div class="form-group" >
                    <div class="col-md-offset-2 col-md-10" style="display:inline">
                        <button type="submit" class="btn btn-primary" >Save</button>
                        @Html.ActionLink("Cancel", "Index", "Matches", null, new { @class = "btn btn-danger" })
                    </div>
                </div>
            </div>
        </div>
    </div>
}

Пока все работает по плану, но я застрял, когда мне нужно добавить спецификацию c игроков на матч

...