У меня есть эти два класса:
State
и Station
:
public class State
{
public int Id { get; set; }
[Required]
public string Code { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<Station> Stations { get; set; }
}
и
public class Station
{
public int Id { get; set; }
[Required]
public string Code { get; set; }
[Required]
public string Name { get; set; }
[Required]
public virtual State State { get; set; }
}
Дизайн был «Code First», и я использовал миграцию для настройки базы данных, и это было похоже на
Таблица станции сохраняет StateId как внешний ключ, как и должно быть
В моем файле StationsController.cs
есть метод Create
, в котором я использую ViewBag
для перечисления названий состояний следующим образом:
// GET: Stations/Create
public IActionResult Create()
{
ViewBag.StatesList = _context.States.ToList();
return View();
}
И, наконец, мой HttpPost
Create
метод
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,Code,Name,State")] Station station)
{
if (ModelState.IsValid)
{
_context.Add(station);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(station);
}
Мой create.cshtml
файл имеет <select>
тег, подобный этому:
<div class="form-group">
<label asp-for="State" class="control-label"></label>
<select asp-for="State" asp-items="@(new SelectList(ViewBag.StatesList, "Id", "Name","State"))" ></select>
<span asp-validation-for="State" class="text-danger"></span>
</div>
Проблема, с которой я сталкиваюсь, заключается в том, что после нажатия submit
мой ModelState.isValid
остается false
, а поле State
равно null
, как показано на этом рисунке:
Поле состояния равно нулю
Controller
был сгенерирован автоматически, и я изменил только две вещи: во-первых, я добавил ViewBag.StateList
в методе Create()
, а во-вторых, я добавил поле State
в Create([Bind("Id,Code,Name,State")]
.
Любая помощь будет принята с благодарностью и извините за длинный пост ..
С уважением
Ashutosh