Gerçekten anlamadığım bir sorun var. Halka açık üye olarak bir listesi olan çok basit bir modelim var. Denetleyicim geri gönderme sırasında modelden bir öğeyi kaldırdığında, TextBoxFor() HTML yardımcıları değişiklikleri algılamıyor gibi görünmüyor. Bu yardımcılar bir şeyleri önbelleğe alıyor gibi görünüyor ama parmağımı üzerine koyamıyorum.MVC4 HTML TextBoxForModel'i Değiştirdikten Sonra ÇalışmıyorForel
Bir Deneme/Yeniden oluşturma burada bulunabilir: http://broken.azurewebsites.net
Repro
- gidin "test" düğmesine basın sıfır tabanlı değerleri
- ile doldurulur http://broken.azurewebsites.net
- Bildirim 4 kolon değerlerine Listede ilk öğeyi kaldırdığım sayfaya POST yapmak için
- Uyarı "Gerçek" değerler doğru ve 0 öğesi ha kaldırıldı, ancak burada sorun TextBoxFor() ile oluşturulan değerlerle. Bu elemanın artık yokken neden 0 oluşturduğunu anlayamıyorum.
Modelleri
public class ItemViewModel
{
public string Description { get; set; }
public decimal? Amount { get; set; }
}
public class TestViewModel
{
public TestViewModel()
{
Items = new List<ItemViewModel>();
}
public List<ItemViewModel> Items { get; set; }
}
Kontrolör
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new TestViewModel();
for (var i = 0; i < 4; i++)
{
model.Items.Add(new ItemViewModel { Description = i.ToString(), Amount = i });
}
return View(model);
}
[HttpPost]
public ActionResult Index(TestViewModel model)
{
model.Items.RemoveAt(0);
return View(model);
}
}
Görünüm
TextBoxFor ModelState yerine modeli değerini yılında sonrası değerine bağlanan: aşağıda istenen davranışı için
@model Demo.Models.TestViewModel @using (Html.BeginForm()) { <table> <thead> <tr><td>Description</td><td>Amount</td><td>Real-Description</td><td>Real-Amount</td></tr> </thead> <tbody> @for (var i = 0; i < Model.Items.Count; i++) { var ii = i; <tr> <td>@Html.TextBoxFor(m => m.Items[ii].Description)</td> <td>@Html.TextBoxFor(m => m.Items[ii].Amount)</td> <td>@Model.Items[ii].Description</td> <td>@Model.Items[ii].Amount</td> </tr> } </tbody> </table> <button>Test</button> }
sayesinde bu konudur eminim. Test edip raporlarım. –