MVC przekazanie modelu z partialview do kontrolera

Odpowiedz Nowy wątek
2015-12-31 10:22
0

Witam mam problem z (jak w temacie) przekazaniem modelu do kontrolera.

Tak wygląda tworzenie partialview:

@Html.Partial("Weather", ShopB2B.Controllers.HomeController.GetWeather())

Gdzie metod GetWeather zwraca dane początkowe zaimplementowanego modelu Weather, która wygląda tak:

    public class Weather_m
    {

        public IEnumerable<SelectListItem> Miasta_dropdown { get; set; }

        public string Temperatura { get; set; }
    }

Dane te są potrzebne do zapełnienia DropDownListFor

@model ShopB2B.Models.Weather_m

@using (@Html.BeginForm("PogodaPrzekaz", "Home", new { weather = Model }, FormMethod.Post))
{

    <table>
        <tr>
            <td>@Html.DropDownListFor(x => x.Miasta_dropdown, Model.Miasta_dropdown)</td>
        </tr>
        <tr>
            <td>@Html.LabelFor(x => x.Temperatura, Model.Temperatura)</td>
            <td><<input type="submit" value="Wyslij" class="submitLink" style=" height: 40px;" /></td>
        </tr>
    </table>

}

Następnie chciałbym ten model zwrócić do kontrolera i tam sprawdzić, która wartość została zaznaczona obrobić te dane i wysłać model podobnie.
Czy ktoś ma pomysł jak to zrobić??????

Pozostało 580 znaków

2015-12-31 13:09
0

Potrzebujesz ViewModelu, który będzie zawierał IEnumerable<SelectListItem> oraz jakieś id wybranego elementu. View niech wyświetla ten ViewModel, a DropDown musisz odpowiednio skonfigurować podając mu zarówno listę wartości, jak i pole ViewModelu do którego ma trafić wybrana wartość. Oczywiście metody w Controlerze też powinny wyświetlać/zwracać obiekt ViewModelu.

P.S. Co to za _m na końcu nazwy klasy? o.O


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2015-12-31 14:00
0

Trochę nie rozumiem, przecież zrobiłem to samo tylko nie w ViewModel tylko Modelu Weather_m (dobra niech będzie bez _m - zaznaczone testowo, abym pamiętał nad którym pracuję).
PartialView (chce żeby był partial bo przyszłościowo chce go obrabiać w ajax) dostawał model Weather_m wypełniony przez kontroler. Weather_m zawierał IEnumerable<selectlistitem>. DropDown wydaje mi się że też jest dobrze wypełniony bo:
podając mu zarówno listę wartości, jak i pole Modelu do którego ma trafić wybrana wartość


@Html.DropDownListFor(x => x.Miasta_dropdown, Model.Miasta_dropdown)

Czyżby źle był wypełniony ten DropDownListFor?????

Pozostało 580 znaków

2015-12-31 14:52
0

Wydaje mi się, że raczej:

@Html.DropDownListFor(x => x.WybranaWartość, x => x.ListaWartościDoWyboru);

"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2015-12-31 15:25
0

ja bym to tak zrobił

@using (Html.BeginForm("PogodaPrzekaz", "Home", "POST"))
{
    @Html.DropDownListFor(model => model.CityID, new SelectList(Model.Miasta_dropdown, "id", "name"))

    <input type="submit" value="wybierz" />
};

dodaj właściwość CityID do modelu widoku. Dwa ostatnie argumenty przekazane do SelectList dotyczą Twojej encji.

edytowany 1x, ostatnio: RideorDie, 2015-12-31 15:27

Pozostało 580 znaków

2015-12-31 16:01
0

Ok, to jak najbardziej działa tylko w dalszym ciągu nie przekazuje formularz wypełnionego new { weather = Model } do kontrolera, cały czas wartość po wciśnięciu Wyslij w kontrolerze pozostaje null???

Pozostało 580 znaków

2015-12-31 16:40
1

Nie musisz używać typów anonimowych new { weather = Model }
Wystarczy, że w metodzie akcji w kontrolerze dodasz oczekujący parametr Twojego modelu widoku.

[httpPost]
public ActionResult PogodaPrzekaz(TwójViewModel viewmodel)

Pozostało 580 znaków

2015-12-31 19:09
0

RideorDie - JESTEŚ GENIALNY zrobiłem tak:


@using (@Html.BeginForm("PogodaPrzekaz", "Home", FormMethod.Post))
{
    <table>
        <tr>
            @*<td>@Html.DropDownListFor(x => x.Miasta_dropdown, Model.Miasta_dropdown)</td>*@
            <td>@Html.DropDownListFor(model => model.idmiasta, new SelectList(Model.Miasta_dropdown, "Value", "Text"))</td>
        </tr>
        <tr>
            <td>@Html.LabelFor(x => x.Temperatura, Model.Temperatura)</td>
            <td><<input id="test2" type="submit" value="Wyslij" class="submitLink" style=" height: 40px;" /></td>
        </tr>
    </table>

i zwróciło mi do kontrolera - Model Weather_m z parametrem idmiasta ustawionym, pozostałe zaś wartości puste. W związku z tym mam pytanie jak to zadziałało, jak działają te encje, rozumiem że przypisało mi z Value wartość do idmiasta, a co w takim razie się dzieje Text. Skąd mam wiedzieć że coś takiego mogę użyć przecież w klasie SelectList nie ma takiej informacji (w każdym razie niezbyt zrozumiałe jak dla mnie).
I drugie pytanie dlaczego @Html.LabelFor(x => x.Temperatura, Model.Temperatura) również nie uzupełnił wartości i nie było jej w Modelu Weather_m
Model wygląda tak:

public class Weather_m
{
    public IEnumerable<SelectListItem> Miasta_dropdown { get; set; }  
    public string Temperatura { get; set; }
    public int idmiasta { get; set; }
}

I co zrobić jak muszą też zwrócić IEnumerable<selectlistitem>?

Z góry dzięki za odpowiedź, bardzo mi pomożesz

edytowany 2x, ostatnio: krisrk4, 2015-12-31 19:14

Pozostało 580 znaków

2016-01-01 11:52
1

Przecież to wszystko pisze w googlach, a nawet w podpowiedziach Visual Studio. Pierwszy lepszy link http://odetocode.com/blogs/sc[...]listfor-with-asp-net-mvc.aspx. Tak samo z label.. Może potrzebujesz TextBoxFor ?

Jak chcesz zwrócić spowrotem IEnumerable<selectlistitem> używasz metody pomocniczej

Html.HiddenFor(model => model.Miasta_dropdown)
edytowany 1x, ostatnio: RideorDie, 2016-01-01 11:54
E tam, przyjmij na klatę że jesteś genialny i ciesz się póki możesz ;-) - AreQrm 2016-01-01 22:53
No w końcu ktoś docenił moją wielką wiedzę i umiejętności pozwalające na czytanie podpowiedzi VS :p. Zrobię sobie screena i będę do tego wracał jak miną dni sławy :D - RideorDie 2016-01-01 23:19
Wpisz sobie w CV to. :D - AreQrm 2016-01-01 23:22
A wiesz że to nie jest głupi pomysł, taka adnotacja: na forum 4programmers określany mianem genialny :D. W końcu nie każdy otrzymuje tu takie wyróżnienia to myślę że mam się czym pochwalić :D :D - RideorDie 2016-01-01 23:27
Rób screena zanim zniknie ;-) - AreQrm 2016-01-01 23:43

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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