MVC Razor, как получить значение параметра из формы и установить для свойства viewmodel выбранное значение - PullRequest
0 голосов
/ 13 декабря 2018

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

Теперь я застрял в том, как отправить выбранную опцию.

Iхочу взять выбранную станцию ​​и отправить ее Id на мой контроллер, который будет использоваться для создания нового завода.

Я бы хотел сделать что-то вроде этого: <input asp-for="stationId" value=@selectedStation.Id">, но ради жизни я не могувыяснить, как получить выбранную опционную станцию ​​и установить для нее значение stationId для модели при публикации формы.

<form asp-controller="Plant" asp-action="Create" method="post">
    <div class="form-group">
        <label for="name">Name:</label>
        <input id="name" asp-for="Name" class="form-control" />
        <span asp-validation-for="Name"></span>
    </div>
    <div class="form-group">
        <label>Station</label>
        <select class="form-control" id="stationId">
            @foreach (var station in Model.Stations)
            {
                <option>@station.Name</option>
            }
        </select>
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

модель представления, используемая для формы:

 public string Name { get; set; }
        public string Description { get; set; }
        public int StationId { get; set; }
        public List<Station> Stations { get; set; }

И, наконец, действие контроллера:

[Authorize]
        [HttpPost]
        public IActionResult Create(CreatePlantViewModel createPlant)
        {
            var plant = new Plant
            {
                StationId = createPlant.StationId,
                Description = createPlant.Description,
                Name = createPlant.Name
            };
            _context.Add(plant);
            _context.SaveChanges();
            return RedirectToAction("Index");
        }

РЕДАКТИРОВАТЬ: С помощью пользователя переполнения стека это было то, что нужно было изменить в элементе выбора для станций:

<div class="form-group">
        <label>Station</label>
        <select class="form-control" id="stationId" asp-for="StationId">
            @foreach (var station in Model.Stations)
            {
                <option value="@station.Id">@station.Name</option>
            }
        </select>
    </div>

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы также можете использовать Razor для этого, я считаю, это помогает отслеживать то, что вы делаете:

@Html.DropDownListFor(m => m.StationId, --Value will be assigned to this variable
                     new SelectList(
                         Model.Stations, 
                         "stationId", 
                         "Name"), --List of values will come from here
                     "-Select Station-", --The default value
                     new {id="stationId",class="Form-control" } -- Attributes you would assignin HTML
    )
0 голосов
/ 13 декабря 2018

Проблема, с которой вы столкнулись, связана с тем, что в контроллер не отправляются никакие значения.Следующее:

<option>@station.Name</option>

Должно быть:

//Assuming that your station class has an id
<option value = "@station.id">@station.Name</option> 

Вы также можете сделать это следующим образом:

<select id="stationId" asp-for="stationId" asp-items=@(new SelectList(Model.Stations, "stationId", "Name")) class="form-control"></select>
...