MVC Core Select Tag не обновляет значение поля - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть приложение с раскрывающимся меню, и я хочу, чтобы выбранное значение из раскрывающегося списка обновляло мою модель, но по какой-то причине этого не происходит.Я всегда получаю пустое значение при маршрутизации на мой метод IActionResult.

Модель:

public class MyModel
{
    public string Name{ get; set; }
    public List<SelectListItem> MyNames { get; set; }
}

Просмотр:

    <label asp-for="Name" class="control-label col-md-3"></label>
        <div class="col-sm-9">
            <select asp-for="Name" asp-items="Model.MyNames" class="form-control"></select>
        </div>
        <span asp-validation-for="Name" class="text-danger"></span>

    <span class="text-right">
                    <a class="btn btn-info btn-lg btn-block" type="submit"
                       asp-action="LoadData"
                       asp-controller="MyController" ,
                       asp-route-Name="@Name">Load Person</a>
                </span>

Контроллер:

public IActionResult Create()
    {
        var names = GetNamesFromFile(fileName);

        var myModel = new MyModel();

        foreach (var name in names)
        {
            myModel.MyNames.Add(new SelectListItem() { Value = name, Text = name});
        }
        return View(myModel);
    }

public IActionResult LoadData(string Name)
    {
       var person = GetPersonByName(Name); 

        return RedirectToAction(nameof(Index), "MyController", new { id = template.PersonId });
    }

Когда я возвращаюсь к своему ActionResult, я ожидаю, что параметр Name будет иметь значение, которое я установил в раскрывающемся меню.Код кажется мне подходящим, я не могу понять, почему он не будет работать.

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

1 Ответ

0 голосов
/ 14 февраля 2019

Звучит так, как будто вы делаете 2 ошибки:

1) Согласно документации MDN , <a> тег type тега, используемый для указания типа MIME носителя для ресурса, которыйссылка на URL.Он никогда не предназначен для выполнения отправки с элементами формы, включая элемент <select>.Следовательно, значение свойства Name никогда не изменяется при перенаправлении на действие LoadData.

2) На странице не указан ни один <form> элемент / тег-помощник, используемый для отправки выбранного значения из <select>элемент.Для отправки значения в метод действия контроллера необходимо отправить форму.

Фиксированная разметка страницы должна выглядеть следующим образом:

<form asp-controller="MyController" asp-action="LoadData" method="get">
    <label asp-for="Name" class="control-label col-md-3"></label>
        <div class="col-sm-9">
            <select asp-for="Name" asp-items="Model.MyNames" class="form-control"></select>
        </div>
        <span asp-validation-for="Name" class="text-danger"></span>

    <span class="text-right">
        <button class="btn btn-info btn-lg btn-block" type="submit">Load Person</button>
    </span>
</form>

При использовании вышеуказанной настройки параметр Name долженсодержит обновленное значение из элемента <select>, поскольку содержимое формы будет отправлено в виде строки запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...