хелперы тегов бритвы selectList asp.netCore - PullRequest
0 голосов
/ 08 июня 2018

Я хочу сделать выпадающий список «Трейлеры» и «Клиенты» доступным в моей форме «Заказ».Я могу использовать Html Tag Helper для передачи данных Trailer из базы данных в представление в форме «Заказ», но я не могу сделать то же самое для Клиентов, использующих Razor Select Tag Helper.Почему помощник по выбору тегов не передает значения из базы данных в представление?Ниже приведены фрагменты моего кода.Я не понимаю, почему он не работает


Класс трейлера

public class Trailer
{
    public string SerialNumber { get; set; }
    public string TrailerNumber { get; set; }
    public string TrailerStatus { get; set; }

    public int TrailerID { get; set; }

    public virtual Order OrderforTrailer { get; set; }

    public Trailer()
    {
        TrailerStatus = "Available";
    }
}

Класс клиента

public class Customer
{
    public string CustomerName { get; set; }
    public string StreetNumber { get; set; }
    public string StreetName { get; set; }
    public string ZipCode { get; set; }
    public string State { get; set; }
    public int CustomerID { get; set; }
    public IList<Order> CustomerOrders { get; set; }
}

Класс заказа

public class Order
{
    public string OrderNumber { get; set; }
    public string OrderStatus { get; set; }
    public int OrderID { get; set; }

    public int TrailerForLoadID { get; set; }
    public virtual Trailer TrailerForLoad { get; set; }

    public int CustomerOrdersID { get; set;}
    public virtual Customer CustomerOrders { get; set; }

    public Order()
    {
        OrderStatus = "Available";
    }

}

AddOrderViewModel

public string OrderNumber { get; set; }

    public int TrailerID { get; set; }
    public List<SelectListItem> TrailersForLoad { get; set; }

    public int CustomerID { get; set; }
    public List<SelectListItem> CustomersOrder { get; set; }

    public AddOrderViewModel()
    {
    }

    public AddOrderViewModel(IEnumerable<Trailer> trailersForLoad, IEnumerable<Customer> customersOrder)
    {

        TrailersForLoad = new List<SelectListItem>();

        foreach (var trailer in trailersForLoad)

        {
            TrailersForLoad.Add(new SelectListItem

            {
                Value = (trailer.TrailerID).ToString(),
                Text = trailer.TrailerNumber
            });
        };

        CustomersOrder = new List<SelectListItem>();

        foreach (var customer in customersOrder)

        {
            CustomersOrder.Add(new SelectListItem

            {
                Value = (customer.CustomerID).ToString(),
                Text = customer.CustomerName
            });
        };

    }

}

Контроллер заказов

public IActionResult Add()
    {
        IList<Trailer> trailerForLoad = context.Trailers.Where
        (c => c.TrailerStatus == "Available").ToList();

        IList<Customer> customerOrder = context.Customers.ToList();

        AddOrderViewModel addOrderViewModel = 
        new AddOrderViewModel(trailerForLoad, customerOrder);

        return View(addOrderViewModel);
    }

    [HttpPost]
    public IActionResult Add(AddOrderViewModel addOrderViewModel)
    {
        if (ModelState.IsValid)
        {
            Order newOrder = new Order()
            {
                OrderNumber = addOrderViewModel.OrderNumber,

                TrailerForLoad = context.Trailers.
                Where(x => x.TrailerID == addOrderViewModel
                .TrailerID).Single(),

                CustomerOrders = context.Customers
                .Single(x => x.CustomerID==addOrderViewModel.CustomerID)
            };
            context.Orders.Add(newOrder);

        trailerSelected = context.Trailers.Where(x => 
        x.TrailerID == addOrderViewModel.TrailerID).Single();

        trailerSelected.TrailerStatus = "Unavailable";   
        context.SaveChanges();
        return Redirect("/Order");
        }
        return View(addOrderViewModel);
    }

В форме в представлении должен отображаться список клиентов

<form asp-controller="Order" asp-action="Add" method="post">

<fieldset>

    <div class="form-group">
        <label asp-for="OrderNumber">Order number </label>
        <input class="form-control" asp-for="OrderNumber" />
        <span asp-validation-for="OrderNumber"></span>
    </div>

    <div class="form-group">
        <label asp-for="TrailersForLoad">Trailer</label>
        @Html.DropDownListFor(x => x.TrailerID, Model.TrailersForLoad)
        <span asp-validation-for="TrailersForLoad"></span>
    </div>

    <div class="form-group">
        <label asp-for="CustomerID">Customers Name</label>
        <select asp-for="CustomerID" 
        asp-items="Model.CustomersOrder"></select>
        <span asp-validation-for="CustomerID"></span>
    </div>

    <div>
        <input type="submit" value="Submit" name="submitButton" />
    </div>

</fieldset>

1 Ответ

0 голосов
/ 08 июня 2018

Вы неправильно используете помощник по тегам SELECT.В вашем текущем коде вы используете подход самозакрывающегося тега!Вместо этого вы должны использовать явный </SELECT> закрывающий тег

Это должно работать

<select asp-for="CustomerID" asp-items="Model.CustomersOrder"></select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...