[c#][MVC] nested model na post null

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • maxtz0r
  • Registratie: Februari 2007
  • Laatst online: 17-12-2022
Ik heb hier al heel veel naar gezocht en ik denk dat het gewoon niet kan maar ik wil het volgende doen:

In mijn view doe ik als volgt een foreach

C#:
1
2
3
4
5
6
7
8
9
10
11
@foreach (var PostTestViewModel in Model.NestedModel)
        {
            using (Html.BeginForm("Action", "Controller", PostTestViewModel))
            {
                //Ter test
                <input type="hidden" name="ObjectId" value="@Model.ObjectId" /> 
                
                <input type="submit" value="Book" class="btn btn-default" />
            }

        }


Ik heb een ViewModel "PostTestViewModel", daarin heb ik een property gedefinieerd die ook terug komt in NestedModel, deze wordt netjes gebind. Het probleem is echter dat NestedModel ook een nested Model heeft en deze is in PostTestViewModel altijd null. In de post data zie ik dan ook staan: "Namespace.PathTo.Model".

Zodra ik hidden fields ga zitten maken om elke property te setten dan worden deze wel gebind maar dat lijkt mij toch niet de bedoeling? Het zijn namelijk ook geen waardes die die in een input horen.

Dying is God's way of telling you, you've been FIRED.


Acties:
  • 0 Henk 'm!

  • blackspeedy
  • Registratie: Juni 2011
  • Laatst online: 19:56
Ik snap niet helemaal wat je nou precies wilt.

Wat stuur je heen, en waar is het precies voor?
En wat wil je weer terug geven?

En om in een foreach telkens een nieuwe form aanmaken is volgens mij ook niet de beste manier.

Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 27-09 13:36
Komt je nested model data uit een database of iets dergelijks? In dat geval zul je volgens mij deze data opnieuw moeten ophalen. Je moet dan natuurlijk wel het id van die data laten terug posten dus die zal in een hidden field moeten, maar zo hoef je in ieder geval niet alle properties in hidden fields te stoppen.

Disclaimer: ik heb niet super veel ervaring met MVC... maar ik doe wel vaker zoiets:

code:
1
2
3
4
5
public void SomeAction(SomeModel model)
{
    model.ChildObject = database.ChildObjects.Find(model.ChildId);
    ...
}

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Ik denk dat de name van het veld de volledige naam moet zijn. Dus: NestedModel.ObjectId.

Zorg ook dat NestedModel een public default constrictor heeft.

Acties:
  • 0 Henk 'm!

  • frG
  • Registratie: Augustus 2004
  • Laatst online: 05-10 12:31

frG

Hier zou je eigenlijk een EditorTemplate voor moeten gebruiken, die werkt ook met List<T>.
Voordeel hiervan is dat je je geen zorgen hoeft te maken over model/property names.

Acties:
  • 0 Henk 'm!

  • maxtz0r
  • Registratie: Februari 2007
  • Laatst online: 17-12-2022
blackspeedy schreef op zaterdag 16 mei 2015 @ 20:24:
Ik snap niet helemaal wat je nou precies wilt.

Wat stuur je heen, en waar is het precies voor?
En wat wil je weer terug geven?

En om in een foreach telkens een nieuwe form aanmaken is volgens mij ook niet de beste manier.
Op basis van een webservice deserialize ik json data in een flinke model met nested models. Ik doe zeg maar een zoekopdracht en krijg "algemene informatie" terug, een "list met boeken", de boeken hebben weer een "list met prijzen" etc...
Ik toon het hele model in een view en door middel van een foreach ga ik door de boeken en prijzen heen. Als een bezoeker nu een boek selecteert wil ik dus een nieuwe viewmodel binden die uiteindelijk omgezet gaat worden naar een postmodel die weer verzonden wordt naar de webservice. Bij het posten blijkt alleen de nested models leeg en heb ik dus alleen de "algemene informatie".
NickThissen schreef op zaterdag 16 mei 2015 @ 20:42:
Komt je nested model data uit een database of iets dergelijks? In dat geval zul je volgens mij deze data opnieuw moeten ophalen. Je moet dan natuurlijk wel het id van die data laten terug posten dus die zal in een hidden field moeten, maar zo hoef je in ieder geval niet alle properties in hidden fields te stoppen.

Disclaimer: ik heb niet super veel ervaring met MVC... maar ik doe wel vaker zoiets:

code:
1
2
3
4
5
public void SomeAction(SomeModel model)
{
    model.ChildObject = database.ChildObjects.Find(model.ChildId);
    ...
}
Dit zou inderdaad ideaal zijn ware het niet dat de webservice die ik gebruik geen calls heeft om de boeken per id of andere identifier op te halen.

Zou het wellicht een idee zijn om het zoek resultaat wat ik van de webservice binnen krijg zelf op te slaan in een database en daar de data uit ophalen in verdere stappen van het proces? Op die manier sla ik ook nog data op wat ik eventueel in een later stadium kan gebruiken.

Ik heb wat aanpassingen aangebracht en sla nu mijn zoekresultaten(models in aparte tabellen) inclusief unieke id's op in een database door middel van enitity framework. Nu hoef ik alleen de id's mee te sturen en kan ik mijn ViewModel op basis van id opbouwen.

[ Voor 6% gewijzigd door maxtz0r op 19-05-2015 08:29 ]

Dying is God's way of telling you, you've been FIRED.

Pagina: 1