/ / Dlaczego mój model ma wartość NULL, gdy zawijam HTML w moim widoku w bloku „@using (Html.BeginForm (…))”? - asp.net-mvc

Dlaczego mój model ma wartość null, gdy owijam kod HTML w moim widoku w bloku "@using (Html.BeginForm (...))"? - asp.net-mvc

Bądźcie ze mną, ponieważ wyjaśnienie problemu, który widzę, może być dość trudne, smażę mózg, ponieważ nie ma to sensu (lub brakuje mi kluczowego elementu logiki).

Mam obiekt modelu widoku A że przechodzę z kontrolera do mocno napisanego widoku B który oczekuje modelu A"s. Kiedy zawijam HTML w widoku B w @using (Html.BeginForm(...)) blok (próbowałem z obu FormMethod.Post i FormMethod.Get tylko w celu przetestowania), środowisko wykonawcze zgłasza wyjątek, gdy działa na następujący kod:

@for (int i = 0; i < Model.DataTable.Columns.Count; i++)

Ponieważ Model w powyższym kodzie ma wartość null. Przeszedłem przez akcję, która zwraca model widoku A obejrzeć B aby upewnić się, że nie przechodzę w modelu zerowym i mogę zagwarantować, że nie. W rzeczywistości istnieją pewne linie, w których używam LINQ do generowania HTML (np. yFor (x => x.Report.Name )) BEFORE the aforementioneddla pętli for`, a te linie są przetwarzane w porządku. Kiedy usuwam blok enkapsulacji, działa dobrze.

Kicker polega na tym, że praktycznie identyczny kod działa w innych widokach z innymi modelami widoków. Używam tego samego stylu for zapętlić w innym widoku C który oczekuje modelu widoku D, i wszystko jest zamknięte w `` bloku, z jakim próbuję sobie poradzić A i B.

EDYTOWAĆ: Oto, jak to wygląda. Mam nadzieję, że to wystarczy. Obawiam się, że nie mogę dać dużo więcej.

/* here is a very basic controller action */
[HttpGet]
public ActionResult View()
{
ViewModel vm = new ViewModel();
vm.Name = "view model test";
vm.Table = new DataTable();
return View(vm);
}

/* here is the view */
@model MyMVCProject.Models.ViewModel
@using (Html.BeginForm("View", "Controller", FormMethod.Post))
{
<h2>Test for: </h2>
@Html.DisplayFor(x => x.Name)

<p>Rows</p>
@for (int i = 0; i < Model.Table.Rows.Count; i++)
{
<p>@Model.Table.Rows[i].Name</p>
}
<input type="submit" value="OK"/>
}

Odpowiedzi:

1 dla odpowiedzi № 1

Ach ... to takie zawstydzające. Jestem pewien, że kompilator był pomylony między mną View akcja i View typ, który zwracam w akcji. Zmieniłem nazwę akcji i wszystko działa zgodnie z oczekiwaniami.