Ich mache meine MVC-Anwendung. Ich erschaffe eine Form mit einem Tisch darin. Eine Tabelle soll Benutzer und Noten enthalten, die sie haben (so etwas wie Notenblatt in Schulen). Ich möchte, dass die Markierungen änderbar sind, also habe ich sie vom Typ TextBox mit dem Standardwert wie in der Datenbank gemacht, aber scheinbar, wenn ich die Schaltfläche "Änderungen anwenden" drücke, sieht der Controller die Liste aller Markierungen als null. Wieso ist es so?
My View (ein Teil davon):MVC-Ansicht Nullwert zurückgeben
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@model ClassDeclarationsThsesis.Models.ClassesViewViewModel
@{
ViewBag.Title = "ClassesView";
}
<h2>ClassesView</h2>
<select id="sel">
<option value="week">Current week</option>
<option value="total">Total</option>
</select>
@{
int i = 0;
int inside = 0;
}
@using (Html.BeginForm("ClassesView", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
<div id="week">
<table border="1" width="500">
<tr>
<th>Surname</th>
<th>Name</th>
@foreach (var task in Model.current)
{
<th>@task.name</th>
}
<th>Total</th>
</tr>
@{
int counter = 0;
int counter1 = 0;
}
@foreach (var user in Model.curr_users)
{
if (user.user_type.Replace(" ", String.Empty) == 1.ToString())
{
<tr>
<th>@user.surname</th>
<th>@user.name</th>
@foreach (var task in Model.current)
{
foreach (var grade in Model.grading)
{
if (user.user_id == grade.user_id)
{
if (task.task_id == grade.task_id)
{
inside = task.value;
i = i + task.value;
counter1++;
}
}
}
<th>@Html.TextBoxFor(m => m.points[counter + counter1 - 1], new { @class = "form-control", @Value = @inside, style = "width:50px;" })</th>
inside = 0;
}
<th>
@i
</th>
@Html.HiddenFor(m => m.class_id)
@Html.HiddenFor(m => m.student_id)
</tr>
}
i = 0;
counter++;
}
</table>
<input type="submit" class="btn btn-default" value="Apply changes" />
</div>
}
points
, die ich hier List<int>
in ClassesViewViewModel
verwendet. Was mache ich falsch?
EDIT:
Added der Controller:
public ActionResult ClassesView(ClassesViewViewModel value)
{
ClassDeclarationsDBEntities4 entities = new ClassDeclarationsDBEntities4();
ClassesViewViewModel model = new ClassesViewViewModel();
model.users = entities.Users.ToList();
model.tasks = entities.Tasks.ToList();
model.group_id = value.group_id;
model.class_id = value.class_id;
model.grading = entities.Gradings.ToList();
model.s_u = entities.Subjects_Users.ToList();
model.t = new List<ClassDeclarationsThsesis.Classes.Task>();
model.current = new List<ClassDeclarationsThsesis.Classes.Task>();
model.curr_users = new List<ClassDeclarationsThsesis.Classes.User>();
DateTime max = DateTime.MinValue;
foreach (var task in model.tasks)
{
if (task.class_id == model.class_id)
{
model.t.Add(new ClassDeclarationsThsesis.Classes.Task(task.task_id, task.class_id, task.name, task.points, task.deadline));
}
}
foreach (var task in model.t)
{
if (DateTime.Compare(task.deadline, max) > 0)
{
max = task.deadline;
}
}
foreach (var task in model.t)
{
if (DateTime.Compare(task.deadline, max) == 0)
{
model.current.Add(task);
}
}
foreach (var s_u in model.s_u)
{
if (s_u.class_id == model.class_id && s_u.group_id == model.group_id)
{
foreach (var user in model.users)
{
if (user.user_id == s_u.user_id)
{
model.curr_users.Add(new ClassDeclarationsThsesis.Classes.User(user.name, user.surname, user.user_id, user.user_type, user.email, user.password));
}
}
}
}
if (ModelState.IsValid)
{
for(int i=0;i<model.points.Count();i++)
{
//getting null here
}
}
else
{
return View(model);
}
return View(model);
}
Zeigen Sie uns bitte Ihren Controller-Code. – Yogi
@Yogi siehe bitte bearbeiten. –
Es ist schwer mit diesem Code zu sagen, aber wahrscheinlich, weil Ihre Indizes nicht sequentiell sind und/oder nicht mit Null beginnen. Damit die Modellbindung funktioniert, müssen Listenindizes mit Null beginnen und ohne Lücken sequenziell sein. – GSerg