Передача имени в View Data вместо ID - PullRequest
0 голосов
/ 10 июня 2019

Я работаю над приложением в .NET Core MVC, и мне хотелось бы иметь имя свойства навигации "Хобби" вместо идентификатора в моем представлении создания

У меня есть это:

И мне бы хотелось:

Что мне удалось получить с этим кодом для действия create в контроллере:

public IActionResult Create()
    {
        ViewData["HobbiesName"] = new SelectList(_context.Set<Hobbies>(), "HobbiesName", "HobbiesName");
        return View();
    }
        [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create([Bind("PersonID,PersonName,PersonSurname,HobbiesID")] Person person)
    {
        if (ModelState.IsValid)
        {
            _context.Add(person);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        ViewData["HobbieName"] = new SelectList(_context.Set<Hobbies>(), "HobbiesID", "HobbiesName", person.HobbiesID);
        return View(person);
    }

А на виду:

<div class="form-group">
            <label asp-for="Hobbies.HobbiesName" class="control-label"></label>
            <select asp-for="Hobbies.HobbiesName" class ="form-control" asp-items="ViewBag.HobbiesName"></select>
        </div>

Но это не работает, потому что мне нужен идентификатор. Кто-нибудь знает, как я могу справиться с этим. У меня заканчиваются идеи.

Спасибо

1 Ответ

0 голосов
/ 13 июня 2019

У меня сработало следующее:

<select asp-for="Name" asp-items="@Model.NameList">

На мой взгляд модель:

public string Name { get; set; }                   
public SelectList NameList { get; set; } 

Лучше работать смодель просмотра и избегать ViewBag.Важно иметь два разных поля: список элементов (с их идентификаторами, уже находящимися за кулисами) и поле, представляющее текст (а не идентификатор) выбранного элемента

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