[ASP.net MVC] TryUpdateModel met Model en ingebouwde lists

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10
Hoi allemaal,

Ik heb een vraagje. Ik ben al zeker een dag bezig met dit probleem en ik kan er maar niet uitkomen.

Ik heb een Edit view welke gebind is aan een eenkel Store model. Store bevat meerdere models en properties.
zoals Store.Address Address is een simpel Object met properties als strings en ints. In store zit ook een Object genaamd ElectronicAddresses dit object is een zelfgemaakte List van ElectronicAddress objecten.

Nu heb ik in mijn view een foreach zoals hieronder
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table>
    <tr>
        <th>Type</th>
        <th>Adres</th>
    </tr>
    <% foreach (ElectronicAddress address  in Model)
       {  %>
       <tr>
           <%= Html.Hidden("ElectronicAddresses[" + address.ElectronicAddressID + "].ElectronicAddressID", address.ElectronicAddressID) %>
           <td><%= Html.TextBox("ElectronicAddresses[" + address.ElectronicAddressID + "].ElectronicAddressType",address.ElectronicAddressType.TypeName) %></td>
           <td><%= Html.TextBox("ElectronicAddresses[" + address.ElectronicAddressID + "].Address",address.Address) %></td>
       </tr>
    <% } %>
    </table>


in Model zit ElectronicAddresses

Op het moment dat ik op submit klik doe ik een post naar de server en haal ik de FormCollection op en nu is mijn vraag hoe kan ik die Electronic addresses binden door middel van een TryUpdateModel

iRacing Profiel


Acties:
  • 0 Henk 'm!

  • bastv
  • Registratie: September 2005
  • Laatst online: 08-09 20:34
is het niet makkelijker om een custom viemodel te gebruiken icm automapper?
zie voorbeeld: http://www.bengtbe.com/bl...models-in-ASPNET-MVC.aspx
of
http://derans.blogspot.co...utomapper-aspnet-mvc.html

Acties:
  • 0 Henk 'm!

  • Flapmo
  • Registratie: April 2000
  • Laatst online: 16-09 18:56

Flapmo

and back is gigi!

Een beetje late reply, ik vermoed dat je dit al geregeld hebt maar voor de form en eventuele searchers:

Indien je gewoon de naam van je TextBox overeen laat komen met je Model properties dan bind hij vanzelf. Stel ik heb een Model Store, die heeft weer een Address wat een object is met oa. een City value, dan zou je view er ongeveer zo uit moeten zien:

code:
1
<td><%= Html.TextBox("Addresses.City", Model.Store.Addresses.City)%></td>


Indien je een model gebruikt, indien je geen model gebruikt en de textbox niet wil pre-populaten met de huidige waarde dan krijg je iets als:

code:
1
<td><%= Html.TextBox("Addresses.City")%></td>


En je controller als het een create method betrof
code:
1
2
3
4
5
6
7
8
9
10
11
12
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection form)
{
      Store store = new Store();
      store.Address = new Address();
      
      TryUpdateModel(store,form.toValueProvider()) // kan ook zonder toValueProvider geloof ik
      if(ModelState.isValid){
           // save to DB etc
      }
      return RedirectToAction("whatever");
}


Als je nu gewoon je form submit en je gebruikt TryUpdateModel dan zou hij gewoon alles moeten overnemen. Indien je het Entity Framework gebruikt moet je overigens soms wel even de lazy loading oplossen door even je store.addressReference.load() aan te roepen indien != IsLoaded.

Voor zover ik kan zien gaat het bij jou dus fout bij de namen van je textboxen, deze moeten overeenkomen met store.xxx.yyy waar xxx is bv address en yyy is een attribuut van address.

"The purpose of computing is insight, not numbers." -- Richard Hamming


Acties:
  • 0 Henk 'm!

  • HMS
  • Registratie: Januari 2004
  • Laatst online: 21-08 23:06

HMS

Bedenk wel dat dan alles gebind wordt. Makkelijkste is dan om een ViewModel er tussen te zetten met alleen de velden die gebind mogen worden.

Zie ook hier: http://www.codethinked.co...hink-Before-You-Bind.aspx