Вы должны показать больше об отношениях (один-к-одному, один-ко-многим) ваших моделей.
Параметры вашего действия после публикации должны соответствовать модели вашего представления,используйте NewCustomerviewModel
вместо Customers
.
. В раскрывающемся списке указывается тип имени и идентификатор передачи в качестве значения для действия, поэтому для раскрывающегося списка asp-for
необходимо указать идентификатор или список идентификаторов.
См. Мою демонстрацию, в которой список идентификаторов MembershipTypes
передается действию с использованием множественного выбора.
1.My ViewModel NewCustomerviewModel
,
public class MembershipTypes
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
public class NewCustomerviewModel
{
public int[] SelectMembershipTypesId { get; set; }
public Customers Customers { get; set; }
}
public class Customers
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<MembershipTypes> MembershipTypes { get; set; }
}
2.СоздатьGET
действие
public IActionResult Create()
{
var model = new NewCustomerviewModel()
{
Customers = new Customers()
{
MembershipTypes = _context.MembershipTypes.ToList()
},
};
return View(model);
}
3. Создание POST
действие
[HttpPost]
public async Task<IActionResult> Create(NewCustomerviewModel viewmodel)
{
if (ModelState.IsValid)
{
viewmodel.Customers.MembershipTypes= _context.MembershipTypes
.Where(m =>viewmodel.SelectMembershipTypesId.Contains(m.Id))
.ToList();
_context.Add(viewmodel.Customers);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(viewmodel);
}
4.Создать представление
@Html.DropDownListFor(m => m.SelectMembershipTypesId,
new SelectList(Model.Customers.MembershipTypes, "Id", "Name"), "Select Membership Type",
new { @class = "form-control", @multiple = "multiple" })