Mam więc kontroler takiego:lista ASP.NET MVC post staje się zerowa w bardzo dziwnych okolicznościach
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; }
}
i widok takiego:
<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>
}
Kiedy zakładać postaci mojego kontrolera zgłasza wyjątek, ponieważ LanguageStrings ma wartość null. Dziwną częścią, o której wspomniałem w tytule, jest to, że jeśli dodaję jeszcze jeden rekord do listy, wszystko działa. Jak to:
<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>
}
działa również kiedy usunąć listę „usunięte”. Jak to:
<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>
}
To ma coś wspólnego z nazewnictwa używam. Rozwiązałem już problem z przemianowaniem LanguageStrings na coś innego. Chciałbym jednak zrozumieć, co się tutaj dzieje, ponieważ prawdopodobnie mógłbym się z niego dowiedzieć, w jaki sposób mapy MVC żądają treści i będą w stanie uniknąć podobnych czasochłonnych problemów. Proszę mi pomóc i wyjaśnić przyczynę tego.
gdzie powinien być ten kod? – raklos
MVC5 ma ten kod, więc po prostu uaktualnij do MVC5. Oto najnowszy kod źródłowy PrefixContainer https://aspnetwebstack.codeplex.com/SourceControl/latest#src/Common/PrefixContainer.cs – LostInComputer