Przesyłanie modelu przez formularz

0

Cześć Mam pytanie wiecie może czemu ten formularz nie przesyła danych do public ActionResult ChangeOrderStatus(OrderItems orderItems) w konrolerze order ?

        [HttpPost]
        public ActionResult ChangeOrderStatus(OrderItems orderItems)
        {

            OrderItems newOrder = db.OrdersItems.SingleOrDefault(x =>x.OrderItemsId  == orderItems.OrderItemsId);


            newOrder.OrderStatus = orderItems.OrderStatus;
            db.SaveChanges();

            return View("ListYourProduct");
        }

        @foreach (var item in Model)
        {
            <tr>
                <td>@item.Product.Name</td>
                <td>@item.Price</td>
                <td>@item.Quantity</td>
                <td>@item.Orders.FirstName</td>
                <td>@item.Orders.SecondName</td>
                <td>
                    @using (Html.BeginForm("ChangeOrderStatus", "Order", new { id = item.OrderItemsId}))
                    {

                        @Html.HiddenFor(x=>item.OrderItemsId)
                        @Html.EnumDropDownListFor(x => item.OrderStatus,  new { onchange = "this.form.submit();" })
                    }
                </td>
                <td><a href="@Url.Action("OrderProductDetails", "Order", new { id = item.OrderItemsId })">Szczegóły</a></td>
            </tr>
        }
0

Pokaż jak jest zbudowany OrderItems. Generalnie chodzi o to, że jak wysyłasz formularz to name każdego inputa powinien odpowiadać nazwie propertisa z OrderItems. I w begin form ustaw Method na Post.

0
szydlak napisał(a):

Pokaż jak jest zbudowany OrderItems. Generalnie chodzi o to, że jak wysyłasz formularz to name każdego inputa powinien odpowiadać nazwie propertisa z OrderItems. I w begin form ustaw Method na Post.

namespace Sklep.Models
{
    public class OrderItems
    {
        public int OrderItemsId { get; set; }
        public int OrderId { get; set; }
        public int ProductId { get; set; }
        public int Quantity { get; set; }
        public string UserName { get; set; }
        public decimal Price { get; set; }

        public virtual Product Product { get; set; }
        public virtual Order Orders { get; set; }
        public OrderStatus OrderStatus { get; set; }
    }

    public enum OrderStatus
    {
        Nowe, Zrealizowany
    }
}

Jak patrzyłem to przesyła się tylko właśnie stan zamowienia a reszta to albo 0 albo null:(

0

Przesyła tylko to co jest w BeginForm

0
szydlak napisał(a):

Przesyła tylko to co jest w BeginForm

a jak ma HiddenFor nie powinno przesłać też id pozycji zamowienia ?

0

Powinno. Podejrzyj w źródłach html czy dobrze generuje inputa z atrybutem name

0
szydlak napisał(a):

Powinno. Podejrzyj w źródłach html czy dobrze generuje inputa z atrybutem name

a sprawdzałem i np

                   @using (Html.BeginForm("ChangeOrderStatus", "Order", FormMethod.Post))
                   {

                       var itemId = item.OrderItemsId;
                       @Html.HiddenFor(x => item.OrderItemsId)
                       @Html.EnumDropDownListFor(x => item.OrderStatus, new { onchange = "this.form.submit();" })


                   }

ta zmienna itemId ma poprawną wartość 5

0

Ale tu nie chodzi tylko o wartość. Jak będzie zły name inputa to nie zbinduje Ci i tak. Jak odpalisz tą stronę i tabelka się wygeneruje to zobacz jak wygląda input z attrubutem hidden

0
szydlak napisał(a):

Ale tu nie chodzi tylko o wartość. Jak będzie zły name inputa to nie zbinduje Ci i tak. Jak odpalisz tą stronę i tabelka się wygeneruje to zobacz jak wygląda input z attrubutem hidden

Wygenerowało coś takiego

<input data-val="true" data-val-number="Pole OrderItemsId musi być liczbą." data-val-required="Pole OrderItemsId jest wymagane." id="item_OrderItemsId" name="item.OrderItemsId" type="hidden" value="5">
0
name="item.OrderItemsId" 

I to jest źle. Powinno być tylko OrderItemsId. Popatrz na te wyrażenie x=>item.OrderItemsId. Bo tu coś nie gra.

0
szydlak napisał(a):
name="item.OrderItemsId" 

I to jest źle. Powinno być tylko OrderItemsId. Popatrz na te wyrażenie x=>item.OrderItemsId. Bo tu coś nie gra.

Właśnie kurcze ale inaczej tego nie mogę zapisać

0
Michał Warmuz napisał(a):
szydlak napisał(a):
name="item.OrderItemsId" 

I to jest źle. Powinno być tylko OrderItemsId. Popatrz na te wyrażenie x=>item.OrderItemsId. Bo tu coś nie gra.

Właśnie kurcze ale inaczej tego nie mogę zapisać
No nie działą kurde

1

Ostatenie możesz zrobić tak:

<input id="prodId" name="prodId" type="hidden" value="xm234jq"> 

oczywiście wstawiając swoje dane

0
Michał Warmuz napisał(a):
Michał Warmuz napisał(a):
szydlak napisał(a):
name="item.OrderItemsId" 

I to jest źle. Powinno być tylko OrderItemsId. Popatrz na te wyrażenie x=>item.OrderItemsId. Bo tu coś nie gra.

Właśnie kurcze ale inaczej tego nie mogę zapisać
No nie działą kurde

Kurcze też patrzyłęm nie działa

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.