Отображение выпадающего списка для базы данных - PullRequest
0 голосов
/ 21 января 2019

Что я пытаюсь сделать -

У меня есть две разные таблицы базы данных (CabinetI, AdminCabinetI). AdminCabinetI содержит заполненные данные (имя столбца ItemID), которые должны отображаться пользователям в виде раскрывающегося списка. Как только пользователи заполняют другую информацию, делают выбор из выпадающего списка и нажимают кнопку отправки, эти данные отправляются в CabinetI.

Когда я добавляю Dropdownlistfor, он начинает выдавать ошибку. Я пробовал много разных способов, но ничего не получалось. Поэтому на данный момент я хотел бы показать свой код и посмотреть, что я сделал неправильно.

Это моя ViewModel -

public class MultipleViews
{
    public Note note { get; set; }

    public AdminCabinetI admincabinetI { get; set; }

    public CabinetI cabineti { get; set; }

    public IEnumerable<AdminCabinetI> SelectSerialsI { get; set; }
}

Это мои модели (AdminCabinetI) и (CabinetI) -

public class AdminCabinetI
{
    [Key]
    public int ItemNo { get; set; }

    [Required(ErrorMessage = "Please enter item title")]
    public string ItemName { get; set; }

    [Required(ErrorMessage = "Please enter Item Serial number/ID")]
    public string ItemID { get; set; }

    [Required(ErrorMessage = "Please select cabinet status")]
    public string ItemStatus { get; set; }

    public string BA { get; set; }

    public string Printer { get; set; }
}

public class CabinetI
{
    [Key]
    public int CabinetNo { get; set; }

    [Required]
    public string CabinetName { get; set; }

    [Required]
    public string Department { get; set; }

    [Required(ErrorMessage = "Please enter your name")]
    public string UserName { get; set; }

    [Required(ErrorMessage = "Please select one of cabinet serial numbers")]
    public string CabinetSerial { get; set; }

    [Required(ErrorMessage = "Please select cabinet status")]
    public string CabinetStatus { get; set; }

    [Required(ErrorMessage = "Please type specify cabinet location")]
    public string CabinetLocation { get; set; }

}

А это мой взгляд -

@ model PreMode.ViewModels.MultipleViews

    <div class="form-group">
        <label>Category</label>
        <input type="text" readonly="readonly" class="form-control" style="opacity: 0.6" value="I2" asp-for="cabineti.CabinetName">
    </div>

    <div class="form-group">
        <label>Department</label>
        <select class="form-control" asp-for="cabineti.Department">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>
    </div>

    <div class="form-group">
        <label>Name</label>
        <input type="text" class="form-control" asp-for="cabineti.UserName" placeholder="Please enter your name" />
        <span class="text-danger" asp-validation-for="cabineti.UserName"></span>
    </div>

    <div class="form-group">
        <label>Serial Number</label>
        @Html.DropDownListFor(model => model.admincabinetI, new SelectList(Model.admincabinetI.ItemID, "ItemID"), "Select Cabinet Serial #", new { @class = "form-control" })

    </div>

    <div class="form-group">
        <label>Status</label>
        <select class="form-control" asp-for="cabineti.CabinetStatus">
            <option value="In Use">In Use</option>
            <option value="Not In Use">Not In Use</option>
            <option value="Testing">Testing</option>
        </select>
        <span class="text-danger" asp-validation-for="cabineti.CabinetStatus"></span>
    </div>

    <div class="form-group">
        <label>Location</label>
        <input type="text" class="form-control" asp-for="cabineti.CabinetLocation" placeholder="Please type current location of the cabinet" />
        <span class="text-danger" asp-validation-for="cabineti.CabinetLocation"></span>
    </div>


    <div class="form-group">
        <button type="submit" class="btn btn-primary">Checkout</button>
        <a class="btn btn-warning" href="/Cabinet/MainCabinetI">Cancel</a>
    </div>
</form>

А это мой контроллер -

    public IActionResult GetDropDown()
    {
        if (ModelState.IsValid)
        {

            using (var db = new DataMigration())
            {
                var CabinetSerialsI = db.AdminCabinetI.ToList();

                var viewModel = new MultipleViews
                {
                    SelectSerialsI = CabinetSerialsI
                };
                return View(viewModel);
            }
        }
        return View();
    }

Ответы [ 2 ]

0 голосов
/ 22 января 2019

SelectList не имеет метода перегрузки , соответствующего вашим намерениям. В HTML-земле элемент select имеет значения и описания, аналогично KeyValuePair. В вашем случае и ключ, и значение совпадают. Чтобы учесть это, попробуйте:

SelectList(Model.admincabinetI.ItemID, "ItemID", "ItemID")
0 голосов
/ 21 января 2019

Добавьте конструктор в класс MultipleViews и установите переменные, такие как this

public MultipleViews()
{
    this.Note  = new Note();
    this.AdminCabinetI  = new AdminCabinetI ();
    this.CabinetI  = new CabinetI ();
    this.SelectSerialsI  = new List<AdminCabinetI>();
}

Вы не объявили переменные до того, как установили их значение.

...