Невозможно добавить значение из выпадающего списка в базу данных - PullRequest
0 голосов
/ 05 мая 2019

Я создал форму для хранения информации о клиентах и ​​типе его членства. Для этого я использую раскрывающийся список для хранения значений для типов членства. Но при отправке формы значение (Id) для типа членства не добавляется в базу данных

//Model Membership Types
public int Id { get; set; }
public string Name { get; set; }

//ViewModel NewCustomerviewModel
public IEnumerable<MembershipTypes> MembershipTypes { get; set; }
public Customers  Customers{ get; set; }

//Controler CustomerController
public IActionResult Index()
{
 var customers = _context.Customers.Include(c => c.MembershipTypes).ToList();
 return View(customers);
}

[HttpPost]// Create is the aciton for Submit Button
public IActionResult Create(Customers customers)
{
 _context.Customers.Add(customers);
 _context.SaveChanges();
 return RedirectToAction("Index", "Customers");
}


//View Model
@model Wes.ViewModels.NewCustomerviewModel;
 @Html.DropDownListFor(m => m.Customers.MembershipTypes, new SelectList(Model.MembershipTypes, "Id", "Name"),"Select Membership Type", new { @class = "form-control" })

Когда форма отправлена, она должна добавить все значения в базу данных, включая значение в раскрывающемся списке Типы членства

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Вы должны показать больше об отношениях (один-к-одному, один-ко-многим) ваших моделей.

Параметры вашего действия после публикации должны соответствовать модели вашего представления,используйте 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" })
0 голосов
/ 06 мая 2019

Вы можете попробовать сделать это так:

//model
public int Id { get; set; }
public string Name { get; set; }
public enum MembershipTypes 
    {
    Type1,
    Type2,
    Type3
    }
public MembershipTypes _membershipTypes {get; set; }
//controller
[HttpPost]
public IActionResult Create([Bind("Id","Name","_membershipTypes")] Customers customers)
    {
        if (ModelState.IsValid)
        {
            _context.Add(customers);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }    
    Return View(customers);    
}
//view
<div class="row">
    <div class="col-md-6">
        <form asp-action="Create">

            <div class="form-group">
                <label asp-for="Name" class="control-label"></label>
                <input asp-for="Name" class="form-control" />
                <span asp-validation-for="Name" class="text-danger"></span>
            </div>

            <div class="form-group">
                @Html.DropDownList("_membershipTypes",
                    new SelectList(Enum.GetValues(typeof(MembershipTypes))),
                    "Select membership type",
                    new { @class = "form-control" })
            </div>

            <input type="submit" value="Submit!" />

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