So habe ich einen Controller wie folgt aus:ASP.NET MVC Beitrag Liste wird unter sehr merkwürdigen Umständen null
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; }
}
Und eine Ansicht wie folgt aus:
<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>
}
Wenn ich poste das Formular mein Controller löst die Ausnahme aus, weil LanguageStrings null ist. Der seltsame Teil, den ich im Titel erwähnt habe, ist, dass alles funktioniert, wenn ich einen weiteren Datensatz zur Liste hinzufüge. So:
<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>
}
Es funktioniert auch, wenn ich die „Gelöscht“ Liste zu entfernen. So:
<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>
}
Das hat etwas mit der Namensgebung zu tun, ich bin mit. Ich habe das Problem mit dem Umbenennen von LanguageStrings zu etwas anderem bereits gelöst. Aber ich würde gerne verstehen, was hier passiert, denn wahrscheinlich könnte ich etwas daraus lernen, wie MVC den Anfragekörper abbildet und ähnliche zeitraubende Probleme vermeiden kann. Bitte helfen Sie mir und erklären Sie die Ursache dafür.
wo sollte dieser Code gehen ?? – raklos
MVC5 hat diesen Code, also nur auf MVC5 aktualisieren. Hier ist der neueste Quellcode von PrefixContainer https://aspnetwebstack.codeplex.com/SourceControl/latest#src/Common/PrefixContainer.cs – LostInComputer