Bu yüzden bir böyle denetleyicisi vardır:ASP.NET MVC Mesaj liste çok garip koşullar altında boş olur
public class TestController : Controller
{
//
// GET: /Test/
public ActionResult Index()
{
return View("Test");
}
public ActionResult Post(IList<Test> LanguageStrings, IList<Test> LanguageStringsGroup, IList<string> Deleted, IList<string> DeletedGroup)
{
if (LanguageStrings == null)
{
throw new ApplicationException("NULL");
}
return View("Test");
}
}
public class Test
{
public string Val { get; set; }
public string Another { get; set; }
}
Ve böyle bir manzara:
<h2>Test</h2>
@using (Html.BeginForm("Post", "Test"))
{
@Html.Hidden("LanguageStrings[0].Val", "test1")
@Html.Hidden("LanguageStrings[0].Another")
@Html.Hidden("LanguageStrings[1].Val", "test2")
@Html.Hidden("LanguageStrings[1].Another")
@Html.Hidden("LanguageStringsGroup[0].Val", "test4")
@Html.Hidden("Deleted[0]")
@Html.Hidden("Deleted[1]")
@Html.Hidden("Deleted[2]")
@Html.Hidden("DeletedGroup[0]")
<button>Post</button>
}
Ben formu benim denetleyicisi zaman sonrası istisna atar, çünkü LanguageStrings boştur. Başlıkta bahsettiğim garip kısım, listeye bir tane daha kayıt eklersek her şeyin işe yarayacağıdır. Bunun gibi : Ben "Silinmiş" listesi kaldırdığınızda
<h2>Test</h2>
@using (Html.BeginForm("Post", "Test"))
{
@Html.Hidden("LanguageStrings[0].Val", "test1")
@Html.Hidden("LanguageStrings[0].Another")
@Html.Hidden("LanguageStrings[1].Val", "test2")
@Html.Hidden("LanguageStrings[1].Another")
@Html.Hidden("LanguageStrings[2].Val", "test3")
@Html.Hidden("LanguageStrings[2].Another")
@Html.Hidden("LanguageStringsGroup[0].Val", "test4")
@Html.Hidden("Deleted[0]")
@Html.Hidden("Deleted[1]")
@Html.Hidden("Deleted[2]")
@Html.Hidden("DeletedGroup[0]")
<button>Post</button>
}
Ayrıca çalışır. Bunun gibi :
<h2>Test</h2>
@using (Html.BeginForm("Post", "Test"))
{
@Html.Hidden("LanguageStrings[0].Val", "test1")
@Html.Hidden("LanguageStrings[0].Another")
@Html.Hidden("LanguageStrings[1].Val", "test2")
@Html.Hidden("LanguageStrings[1].Another")
@Html.Hidden("LanguageStringsGroup[0].Val", "test4")
@Html.Hidden("DeletedGroup[0]")
<button>Post</button>
}
Bu kullanıyorum adlandırma ile ilgili bir şey vardır. DilStrings'i başka bir şeye yeniden adlandırma ile sorunu zaten çözdüm. Ama burada neler olduğunu anlamak isterim çünkü muhtemelen MVC haritalarının vücut talep etmesini ve benzer zaman alıcı problemlerden sakınmayı nasıl başarabileceğimi öğrenebilirim. Lütfen bana yardım et ve bunun nedenini açıkla.
Bu kod nereye gitmeli? – raklos
MVC5 bu koda sahiptir, bu yüzden MVC5'e geçin. İşte PrefixContainer en son kaynak kodu https://aspnetwebstack.codeplex.com/SourceControl/latest#src/Common/PrefixContainer.cs – LostInComputer