2009-02-05 21 views
5

Başımın en tepesinden düşünebileceğim en iyi örnek, Amazon alışveriş sepeti olurdu. Güncellenen birden fazla farklı alana sahip birden çok farklı kayıt gösteren bir sayfanız var.MVC'de tekrarlanan formları işlemenin en iyi yolu nedir?

Her biri bir form etiketine koyamıyorum çünkü kullanıcı birden fazla kaydı değiştirebilir ve gönderebilir.

Sadece geri almak bütün kayıtlarını güncellemek olamaz çünkü:
1. Performans
2. Denetim
3. birisi iken kullanıcı 'değişmedi' söz konusu kaydı değiştirdiyseniz sayfayı görüntüledikten sonra kullanıcı bu değişikliklerin üzerine yazılır.

Peki, verileri geri almanın en iyi yolu nedir?

Bu açık mı?

cevap

3

Bağlantı kullanın! Form koleksiyonunu eylemlerinizde yineleme.

Steve Sanderson, bunun nasıl yapılacağı hakkında bir blog post yazdı. MvcContrib ile nasıl yapılacağı hakkında bir blog post yazdım. FluentHtml. Her iki gönderi de çok detaylı ve indirilebilir kod içeriyor.

1

Formunuzu tekrarlayıcıda oluşturun ve her yeni formla artan form öğelerine bir kimlik ekleyin. Gizli alandaki tekrarlanan form öğelerinin sayısını kaydedin. Sonra kontrol cihazınızda, bu gizli alanın değerini okuyun - bu, okunacak formların sayısı olacaktır. Daha sonra, bir döngüde, alanın adını ve isme eklenmiş olan döngü dizini anahtar olarak belirterek her formun alanlarını alın.

Bir formun değerinin ne zaman değiştiğini algılamak için javascript mantığını kullanabilir ve bu durumda bu formun bölümdeki gizli alanı güncelleyebilirsiniz; ya da gizli bir alanın içindeki orijinal değerleri her form bölümü ile gizleyebilirsiniz (bunu çok fazla alan/form sayfanızdan etkilenmeyeceği için önermiyorum).

+0

Sanırım bunu sevdim. Bir kaydın ne zaman değiştiğini söyleyen gizli alan + JS güncellemesi, düşünmediğim şey. Bir koleksiyon parametresi olarak bir koleksiyon elde etmek için bir model bağlayıcı bile yazabilirim. –

+0

Bir model bağlayıcı kesinlikle gitmek için iyi bir yol olurdu. :) Nasıl gittiğini bize bildirin. –

1

biri (şart olmamakla birlikte en iyi) yaklaşım js-değişken istemci tarafında tarihinde falan bunlar değiştirilir olarak değişti ve ardından sadece neyden aslında farklıdır veri göndermek hangi ürün saklamaktır kullanıcı alındı.

ve Erik'in belirttiği gibi, gizli form öğelerini js olmadan da çalıştığından emin olmak için kullanabilirsiniz.

+0

Bu iyi bir çözümdür - ve cevabımın içeriğini eklediyseniz, ortak durumda trafiği azaltan bir çözümünüz var, ancak JS'nin etkin olmadığı bir kullanıcının yaygın olmayan durumunda hassas bir şekilde küçülüyor . –

İlgili konular