Я пытаюсь выполнить CRUD в ASP.net 6, но у меня возникают трудности с размещением моих данных в базе данных. Я считаю, что данные моей формы недействительны из-за моих списков выбора, но я не уверен. Ниже показано, как выглядит мой код.
public class CreateModel : StudentSelectListPageModel
{
private readonly ThreeTierAdvisementApp.Data.AdvisementDbContext _context;
public CreateModel(ThreeTierAdvisementApp.Data.AdvisementDbContext context)
{
_context = context;
}
public IActionResult OnGet()
{
PopulateDropDownList(_context);
return Page();
}
[BindProperty]
public Student Student { get; set; }
// To protect from overposting attacks, see https://aka.ms/RazorPagesCRUD
public async Task<IActionResult> OnPostAsync()
{
var emptyStudent = new Student();
var emptyAdvisor = new Advisor();
//var emptyMajor = new Major();
if (await TryUpdateModelAsync<Student>(
emptyStudent, "student",
s => s.ID, s => s.Name, s => s.Address, s => s.PhoneNumber, s => s.Email, s => s.Major, s => s.Status, s => s.Advisor))
{
_context.Students.Add(emptyStudent);
await _context.SaveChangesAsync();
return RedirectToPage("./Index");
}
PopulateDropDownList(_context);
return Page();
}
}
public class StudentSelectListPageModel : PageModel
{
public SelectList AdvisementNameSL { get; set; }
public SelectList MajorNameSL { get; set; }
public SelectList StatusNameSL { get; set; }
public void PopulateDropDownList(AdvisementDbContext _context)
{
var advisorQuery = from d in _context.Advisors
orderby d.Name // Sort by name.
select d;
var majorQuery = from d in _context.Students
orderby d.Major // Sort by name.
select d;
var statusQuery = from d in _context.Students
orderby d.Name // Sort by name.
select d;
AdvisementNameSL = new SelectList(advisorQuery.AsNoTracking(),
"ID", "Name");
MajorNameSL = new SelectList(majorQuery.AsNoTracking(),
"ID", "MajorID");
StatusNameSL = new SelectList(statusQuery.AsNoTracking(),
"ID", "Status");
}
}
<div class = "col-md-4">
<form method = "post">
<div asp-validation-summary = "ModelOnly" class = "text-danger"></div>
<div class = "form-group">
<label asp-for = "Student.ID" class = "control-label"></label>
<input asp-for = "Student.ID" class = "form-control" />
<span asp-validation-for = "Student.ID" class = "text-danger"></span>
</div>
<div class = "form-group">
<label asp-for = "Student.Name" class = "control-label"></label>
<input asp-for = "Student.Name" class = "form-control" />
<span asp-validation-for = "Student.Name" class = "text-danger"></span>
</div>
<div class = "form-group">
<label asp-for = "Student.Address" class = "control-label"></label>
<input asp-for = "Student.Address" class = "form-control" />
<span asp-validation-for = "Student.Address" class = "text-danger"></span>
</div>
<div class = "form-group">
<label asp-for = "Student.PhoneNumber" class = "control-label"></label>
<input asp-for = "Student.PhoneNumber" class = "form-control" />
<span asp-validation-for = "Student.PhoneNumber" class = "text-danger"></span>
</div>
<div class = "form-group">
<label asp-for = "Student.Email" class = "control-label"></label>
<input asp-for = "Student.Email" class = "form-control" />
<span asp-validation-for = "Student.Email" class = "text-danger"></span>
</div>
<div class = "form-group">
<label asp-for = "Student.MajorID" class = "control-label"></label>
<select asp-for = "Student.Major" class = "form-control" asp-items = "@Model.MajorNameSL"><option value = "">-- Select Major --</option></select>
</div>
<div class = "form-group">
<label asp-for = "Student.Status" class = "control-label"></label>
<select asp-for = "Student.ID" class = "form-control" asp-items = "@Model.StatusNameSL"><option value = "">-- Select Status --</option></select>
<span asp-validation-for = "Student.Status" class = "text-danger"></span>
</div>
<div class = "form-group">
<label asp-for = "Student.AdvisorID" class = "control-label"></label>
<select asp-for = "Student.AdvisorID" class = "form-control" asp-items = "@Model.AdvisementNameSL"><option value = "">-- Select Advisor --</option></select>
</div>
<div class = "form-group">
<input type = "submit" value = "Create" class = "btn btn-primary" />
</div>
</form>
</div>
Когда я пытаюсь выполнить отладку, я замечаю, что заполняются только отдельные входы, а раскрывающиеся меню - нет. Могу ли я получить руководство, как правильно настроить раскрывающиеся списки.





Согласно:
Для
public SelectList(IEnumerable items, string dataValueField, string dataTextField);первый параметр — источник, второй параметр — это значение каждого параметра в select, третий параметр — это каждый Текст опции в html.Привязка модели отправит выбранное значение на серверную часть, и оно привяжется значение соответствует свойству в бэкэнде с атрибутом имени во фронтенде.
1. Убедитесь, что установленные вами dataValueField и dataTextField свойства существуют в модели, также свойство должно быть данными простого типа, а не сложной моделью.
2. Соответствующий выбор asp-for также должен быть свойством простого типа, а не моделью.
3. Три выпадающих списка, которые вы установили с одним и тем же dataValueField(ID), данные, которые вы отправляете на серверную часть, всегда будут выбранным вами идентификатором, который может не соответствовать вашим требованиям.
например
<div class = "form-group">
<label asp-for = "Student.AdvisorID" class = "control-label"></label>
<select asp-for = "Student.AdvisorID" class = "form-control" asp-items = "@Model.AdvisementNameSL"><option value = "">-- Select Advisor --</option></select>
</div>
Соответствующий внутренний код для магазина AdvisementNameSL должен быть:
AdvisementNameSL = new SelectList(advisorQuery.AsNoTracking(),
"AdvisorID", "Name");
Привет @AFB, не могли бы вы поделиться дизайном всей модели
Student,AdvisorиMajor? И что вы имеете в виду подonly the single inputs are populating? Для вашего метода OnGet просто заполните раскрывающийся список, вы имеете в виду, что вы нажмете метод OnPost и потерпите неудачу дляTryUpdateModelAsync, он вернет страницу без заполнения раскрывающегося списка? Кроме того, вы сначала сказалиposting my data to the data base, вы имели в виду, что не можете успешно публиковать данные, которые хотите успешно обработать?