2016-03-26 25 views
0

denetleyicisindeki farklı bir sonuca sahiptir. Ürünümü varlık çerçevesini kullanarak güncelleştirme konusunda sorun yaşıyorum. Formumu gönderdiğimde, geliştiricinin araçlarından, formun [0] .Id = 3.Ön uçtan gönderilen form verisi, ASP.NET MVC

olduğunu doğrulayabilirim. Ancak, hata ayıklaması yaparken, debug.print, yazdırmayı 0 olarak yazdırır. . İşte

public ActionResult Details(IList<Item> model) 
{ 
if (ModelState.IsValid) 
     { 
      Debug.Print(model[0].Id.ToString()); //This prints 0 
      Debug.Print(model[0].Name);// This prints correctly 
      Debug.Print(model[0].Size);// This prints correctly 
      Debug.Print(model[0].RetailPrice.ToString());// This prints correctly 
      Debug.Print(model[0].IsAvailable.ToString());// This prints correctly 
      for (int i = 0; i < model.Count(); i++) 
      { 
       ndb.Entry(model[0]).State = System.Data.Entity.EntityState.Modified; 
       ndb.SaveChanges(); 
      } 

      return RedirectToAction("ProductIndex"); 
     } 
     return View(model); 
    } 

Herkes bir fikrin neden vardır benim denetleyicisi nedir?

DÜZENLEME:

using (Html.BeginForm()) 
{ 
@Html.AntiForgeryToken() 

<table> 
    <thead> 
     <tr> 
      <td>Name</td> 
      <td>Size</td> 
      <td>Price</td> 
      <td>Available</td> 
     </tr> 
    </thead> 
    @for (int i = 0; i < Model.Count(); i++) 
    { 
     <tr> 
      @Html.HiddenFor(m => m[i].Id) 
      @Html.HiddenFor(m => m[i].Name) 
      @Html.HiddenFor(m => m[i].Size) 
      @Html.HiddenFor(m => m[i].RetailPrice) 
      <td> 
       @Model[i].Name 
      </td> 
      <td> 
       @Model[i].Size 
      </td> 
      <td> 
       @Model[i].RetailPrice 
      </td> 
      <td> 
       @Html.CheckBox("["+i+"].IsAvailable", Model[i].IsAvailable) 
      </td> 
     </tr> 
    } 

    <tr> 
     <td> 
      <input type="submit" value="Save" class="btn btn-default" /> 
     </td> 
    </tr> 

</table> 
} 

Ve Daha önce de belirtildiği gibi, biçim geliştiricinin aracından teslim Doğru kimliği gösterdi, ancak denetleyici geldiğinde, her zaman ve kimlik olarak bana 0 verir.

+0

Eğer bu alan dışındaki her şey çalışıyorsa, o zaman bir ID'sinin ayarlayıcı olmadığını hissediyorum. 'Id' özelliği veya sadece bir alıcı üzerinde bir ayarlayıcınız var mı? –

+1

"Ayrıntılar" görünüm kodunu ekleyebilir misiniz? Tahminimce "ID" – TheUknown

+0

@ Nava-Prev.Queti görünümünde tanımlı değilsiniz, Id özelliği kullanamazsınız, çünkü snippet'ları kullanıyorum çünkü kaçırmam. –

cevap

0

Görünümünüzde muhtemelen ID alanını kaçırdınız. Gizli olarak görüntüle alanına ID alanını eklemeli veya özelliği ona eklemelisiniz.

Ayrıca, görünümdeki EF nesnelerini kullanmanız önerilmez. Bunun yerine bir Özel Görünüm Modeli oluşturun.

+0

Merhaba, Özel Görünüm Modelini kullanabiliyor olsa da, Kimlik alanını Görünümüm'e koymuştum, hala kontrolörde Kimlik'in 0'a geri dönmeye devam etmesinin nedenini hala merak ediyorum, ancak dev araçlarda doğru numarayı gösteriyor. –

0

deneyin (her ikisi veya 2 tek çalışmalıdır. Denememiş mı. Ama Model kullanmak gerekir Ya)

@Html.HiddenFor(@Model[i].Id) 

VEYA

@Html.HiddenFor(m => Model[i].Id) 
altına

@Html.HiddenFor(m => m[i].Id) 

değişen

+0

Üzgünüz ama yine de işe yaramıyor, benim düşüncem sorun değil, form zaten doğru Kimliği gönderiyor, çünkü tek sorun, Kimlik denetleyiciye geldiğinde, her zaman 0 döndürür. –

+0

Fiddler hangi veri yollanır? – TheUknown

+0

Modelinizi görünüme mi geçiriyorsunuz? '@model IList // ayrıntıların ilk satırı ''? 'Öğe' modeli neye benziyor, modeli ve diğer ilgili kodu ekleyebilir misiniz? – TheUknown