Как создать представление для выпадающего списка? - PullRequest
0 голосов
/ 16 апреля 2019

У меня проблема с представлением выпадающего меню. Вот мой код Модель:

public class student
{
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int StudentId { get; set; }
    [Display(Name = "Šifra ispitanika:")]
    [Range(1, 9999)]
    public int StudentNumber { get; set; }
    [Display(Name = "Datum rođenja ispitanika:")]
    [DataType(DataType.Date)]
    public DateTime DateBirth { get; set; }
    [Display(Name = "Mjesto rođenja ispitanika:")]
    public string PlaceBirth { get; set; }
    [Display(Name = "Datum testiranja ispitanika:")]
    [DataType(DataType.Date)]
    public DateTime TestDate { get; set; }
    [Display(Name = "Godina rođenja majke:")]
    [Range(1900, 2000)]
    public int MumDate { get; set; }
    [Display(Name = "Godina rođenja oca:")]
    [Range(1900, 2000)]
    public int DadDate { get; set; }

    [Display(Name = "Dropdown_test:")]
    public string MumSport { get; set; }
    [NotMapped]
    public List<SelectListItem> MumSports { set; get; }
}

Контроллер:

        public async Task<IActionResult> Create([Bind("StudentId,StudentNumber,DateBirth,PlaceBirth,TestDate,MumDate,DadDate,MumSports")] student student)
    {
        if (ModelState.IsValid)
        {
            var MumSports = new student
            {
                MumSports = new List<SelectListItem>
                {
                    new SelectListItem { Text = "nikako", Value = "1" },
                    new SelectListItem { Text = "rekreativno", Value = "2" },
                    new SelectListItem { Text = "amaterski", Value = "3" },
                    new SelectListItem { Text = "profesionalno", Value = "4" }
                }

            };

            _context.Add(student);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(student);
    }

Вид:

            <select asp-for="StudentId" asp-items="@(ViewBag.MumSports)">
                <option>Please select one</option>
            </select>
        </div>

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

1 Ответ

0 голосов
/ 17 апреля 2019

Одна вещь, в которой вам нужно убедиться, когда вы заполняете любой контент на странице производной от сервера информацией, это то, что вы передаете его правильно.

По вашему мнению, я вижу, что вы ищете ViewBag.MumSport. Таким образом, это означает, что в запросе get вашего действия вам нужно будет заполнить ViewBag.MumSport соответствующими значениями.

Контроллер, который вы написали, также выглядит немного запутанным ... мы обычно ожидаем, что у нас будет контроллер "get (verb)", который вы используете для настройки страницы. Обычно мы делаем такие вещи, как создание значений для выпадающего списка и заполнение всего, что вам нужно для страницы. Обычно здесь не происходит сохранение данных. Однако создается впечатление, что вы сохраняете раскрывающийся список в базе данных?

Полагаю, вам может понадобиться что-то вроде этого:

public IActionResult Create()
{
      ViewBag.MumSport = new List<SelectListItem>
            {
                new SelectListItem { Text = "nikako", Value = "1" },
                new SelectListItem { Text = "rekreativno", Value = "2" },
                new SelectListItem { Text = "amaterski", Value = "3" },
                new SelectListItem { Text = "profesionalno", Value = "4" }
            }

      return View();
}

[HttpPost]
public IActionResult Create(view model goes in here)
{
      Business logic goes here
}

Это должно означать, что ваш выпадающий список заполняется, но он также показывает различие между методами post и get. Как правило, публикация - это то, где вы можете создать или сохранить информацию в магазине (базе данных).

Надеюсь, это поможет

UPDATE вместо того, чтобы иметь все свойства как часть подписи для метода post, вы можете попробовать использовать созданную вами модель:

public async Task<IActionResult> Create(student viewModel)

Затем вам необходимо убедиться, что ваши элементы ввода в форме имеют имена, совпадающие с моделью представления (student):

<select asp-for="StudentId" asp-items="@(ViewBag.MumSports)">

если вы сделаете это, ваши свойства должны автоматически привязаться к viewModel, когда вы нажмете на контроллер. Еще одним преимуществом такого подхода является то, что ModelState.IsValid будет проверять все атрибуты в этом классе и проверять их, когда вы отправляете форму. Это особенно полезно при установке полей в соответствии с требованиями с помощью атрибута [Обязательный]

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