Model
public class Coordinate
{
public double[] CoordinateArray { get; set; }
}
Przykład 1
Widok jest silnie typowany, ale nie zwracam żadnego modelu do widoku. Normalnie pomyślałbym, że zwracany w takim wypadku jest null
(w sensie model w widoku ma wartość null
), ale wtedy powinien chyba zostać rzucony wyjątek NullReferenceException
w 6 linijce w widoku. Co przekazuje kontroler do widoku w tym przykładzie?
Kontroler
public ActionResult Coordinate()
{
return View();
}
Coordinate.cshtml
@model IList<MyProgram.Models.Coordinate>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@Html.EditorFor(x => x[0].CoordinateArray[0])
@Html.EditorFor(x => x[0].CoordinateArray[1])
@Html.EditorFor(x => x[1].CoordinateArray[0])
Przykład 2
Po naciśnięciu przycisku OK powinniśmy dostać widok z trzema polami tekstowymi z następującymi wartościami:
pole 1: 97
pole 2: 98
pole 3: wartość jaką podaliśmy przed naciśnięciem przycisku OK
Dostaję jednak we wszystkich polach wartości takie, jakie podałem przed naciśnięciem przycisku OK. Metoda Coordinate
z atrybutem [HttpPost]
zwraca instancję obiektu z "dobrymi" danymi, czyli cList[0].CoordinateArray[0] == 97
, cList[0].CoordinateArray[1] == 98
, cList[1].CoordinateArray[0] == to co wpisaliśmy w widoku w trzecim polu
. Dlaczego zatem te dane nie są wyświetlane w widoku? Przecież model, który zwracamy w kontrolerze powinien zostać przekazany do widoku i wyświetlony w nim, a okazuje się, że jednak nie w tym przypadku. Gdzie są zapamiętywane te dane wyświetlane w widoku?
Kontroler
public ActionResult Coordinate()
{
return View();
}
[HttpPost]
public ActionResult Coordinate(List<Coordinate> cList)
{
cList[0].CoordinateArray[0] = 97;
cList[0].CoordinateArray[1] = 98;
return View(cList);
}
Widok
@model IList<MyProgram.Models.Coordinate>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("Coordinate", "Home", FormMethod.Post))
{
@Html.EditorFor(x => x[0].CoordinateArray[0])
@Html.EditorFor(x => x[0].CoordinateArray[1])
@Html.EditorFor(x => x[1].CoordinateArray[0])
<input type="submit" name="btnOK" value="OK" />
}