ASP.NET MVC wysyłanie formularza w tabelce

0

Witam,
Stworzyłem formularz w tabelce, używam: @ Html.LabelFor oraz @ Html.TextBoxFor wewnątrz @using (Html.BeginForm("WyszukiwarkaProdukty", "Home")). Home - kontroler, WyszukiwarkaProdukty to akcja w tym kontrolerze. pod tabelką umiesciłem <input type="submit" value="Wyszukaj" />. Jednak Formularz nie wysyła się po wciśnięciu przycisku Wyślij.
Nie rozumiem w czym jest problem. Użyłem tabelki by wyrównać Label z TextBoxem. Bardzo prosze o pomoc.

Z góry dziękuję

 @model Marketing.Models.ZbiorSklepModel
 <div style="color:#102978">
    <!-- Wyszukiwarka-->
    @using (Html.BeginForm("WyszukiwarkaProdukty", "Home"))
    {
        <table>
            <tr>
                <td>
                    @Html.LabelFor(n => n.wyszukiwarkaProduktow.frazaNazwa)
                </td>
                <td>
                    @Html.TextBoxFor(n => n.wyszukiwarkaProduktow.frazaNazwa, new { @style = "color:red;" })
                </td>   
            </tr>
            <tr>
                <td>
                    @Html.LabelFor(n => n.wyszukiwarkaProduktow.maxCena)
                </td>
                <td>
                    @Html.TextBoxFor(n => n.wyszukiwarkaProduktow.maxCena, new { @style = "color:red;" })
                </td>
            </tr>
            <tr>
                <td>
                    @Html.LabelFor(n => n.wyszukiwarkaProduktow.ilosc)
                </td>
                <td>
                    @Html.TextBoxFor(n => n.wyszukiwarkaProduktow.ilosc, new { @style = "color:red;" })
                </td>
            </tr>
            <tr>
                <td>
                    @Html.LabelFor(n => n.wyszukiwarkaProduktow.frazaOpis)
                </td>
                <td>
                    @Html.TextBoxFor(n => n.wyszukiwarkaProduktow.frazaOpis, new { @style = "color:red;" })
                </td>
            </tr>
            <tr>
                <td>aa</td>
            </tr>
        </table>
        <input type="submit" value="Wyszukaj" />
    }
</div>

AKCJA:

         [HttpPost]
        public ActionResult WyszukiwarkaProdukty(ZbiorSklepModel zbiorSlepModel2) 
        {
            ZbiorSklepModel zbiorSlepModel = new ZbiorSklepModel();
            SklepModelContainer1 db = new SklepModelContainer1();
            var query = db.ProduktySet.Take(2).ToList();
            if (query == null)
            {
                return Content("Brak produktow");
            }
            zbiorSlepModel.listaProdukty = query;
            return View("Produkty", zbiorSlepModel);
        }
0

Tam nie powinno być Html.BeginForm("WyszukiwarkaProdukty", "Home", FormMethod.Post), aby formularz był wysłany metodą POST, której oczekujesz?

0

@using (Html.BeginForm("WyszukiwarkaProdukty", "Home", FormMethod.Post))

0

Nie wiem czy to istotne, ale model jest mocno opakowany

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Marketing.Models
{
    public class ZbiorSklepModel
    {
        public List<Produkty> listaProdukty;
        public List<Uzytkownicy> listaUzytkownicy;
        public List<Zamowienia> listaZamowienia;

        public Produkty produkty;
        public Uzytkownicy uzytkownicy;
        public Zamowienia zamowienia;
        public WyszukiwarkaProduktow wyszukiwarkaProduktow;
        public ZbiorSklepModel()
        {

        }
    }
}

w którym odwołuje sę do WyszukiwarkaProduktow

 using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace Marketing.Models
{
    public class WyszukiwarkaProduktow
    {
        [Display(Name ="Górna Cena")]
        public int maxCena { get; set; }
        [Display(Name = "Nazwa Produktu")]
        public string frazaNazwa { get; set; }
        [Display(Name = "Ilość")]
        public int ilosc { get; set; }
        [Display(Name = "Opis Produktu")]
        public string frazaOpis { get; set; }

    }
}

Na moją logikę powinno to działać. Dla jednego textBoxa wszystko działa, dla dwóch już nie wysyła.
Proszę o pomoc. Buduję wyszukiwarkę na stronie. Ewentualnie pododaje atrybuty name="zmienna1"... i będę stringami pobierać dane ale to takie nie do końca myśle.

1

Tu masz link do fajnego tutka. Jest pokazane jak przekazywać formularz do akcji
https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/introduction/examining-the-edit-methods-and-edit-view
Używanie tabelek w formularzu to nie jest dobry pomysł. Układ robi się za pomocą css.

1

Ale co "nie działa"?
Strona wyświetla się prawidłowo? Jak wygląda jej HTML?
Po kliknięciu przycisku jest cokolwiek wysyłane na serwer? Możesz się podpiąć debugerem?

1

Czemu przekazujesz ZbiorSklepModel skoro używasz w widoku tylko WyszukiwarkaProduktow? Poza tym w akcji w ogóle nie używasz przekazanego obiektu. Czy debugger wchodzi Ci w akcje? Poza tym obiekt contextu nie jest disposowany, to bardzo zła praktyka. Wsadz go w using lub najlepiej wstrzyknij w konstrutkorze i odpowiednio zarejestruj w kontenerze IoC.

1 użytkowników online, w tym zalogowanych: 0, gości: 1