Reputation: 467
I have a view that displays a boolean (currently defaulted to 0) in a box format in the view that I cannot check to activate as true and also want to enter text in the result field to pass back to the controller and save both changes to a table. Can someone please explain what I have to do to allow this functionality to work please.
Controller code
public ActionResult P1A1Mark()
{
List<MarkModel> query = (from row in db.submits
where row.assignment_no.Equals("1") && row.group_no == 1
group row by new { row.assignment_no, row.student_no, row.student.firstname, row.student.surname } into g
select new MarkModel
{
student_no = g.Key.student_no,
student_surname = g.Key.surname,
student_firstname = g.Key.firstname
}
).ToList();
return View(query);
}
View
@model IEnumerable<MvcApplication2.Models.MarkModel>
@{
ViewBag.Title = "P1A1Mark";
}
<h2>Mark Student Assignments</h2>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.student_no)
</th>
<th>
@Html.DisplayNameFor(model => model.student_surname)
</th>
<th>
@Html.DisplayNameFor(model => model.student_firstname)
</th>
<th>
@Html.DisplayNameFor(model => model.submitted)
</th>
<th>
@Html.DisplayNameFor(model => model.result)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.student_no)
</td>
<td>
@Html.DisplayFor(modelItem => item.student_surname)
</td>
<td>
@Html.DisplayFor(modelItem => item.student_firstname)
</td>
<td>
@Html.DisplayFor(modelItem => item.submitted)
</td>
<td>
@Html.DisplayFor(modelItem => item.result)
</td>
</tr>
}
</table>
Model
public class MarkModel
{
public string student_no { get; set; }
public string student_surname { get; set; }
public string student_firstname { get; set; }
public string assignment_no { get; set; }
public bool submitted { get; set; }
public string result { get; set; }
public Nullable<int> group_no { get; set; }
}
Upvotes: 5
Views: 297
Reputation:
Create an EditorTemplate
for type of MarkModel
.
In /Views/Shared/EditorTemplates/MarkModel.cshtml
@model MvcApplication2.Models.MarkModel
<tr>
<td>@Html.DisplayFor(m => m.student_no)</td>
<td>@Html.DisplayFor(m => m.student_surname)</td>
<td>@Html.DisplayFor(m => m.student_firstname)</td>
<td>@Html.CheckBoxFor(m => m.submitted)</td>
<td>@Html.TextBoxFor(m => m.result)</td>
</tr>
and in the main view
@model IEnumerable<MvcApplication2.Models.MarkModel>
@using (Html.BeginForm())
{
<table>
<thead>
// add your th elements
</thead>
<tbody>
@Html.EditorFor(m => m)
<tbody>
</table>
<input type="submit" ../>
}
and create a method to post back to
[HttpPost]
public ActionResult P1A1Mark(IEnumerable<MarkModel>model)
Alternatively you can use a for
loop in the view (the model must be IList<T>
)
for(int i = 0; i < Model.Count; i++)
{
....
@Html.CheckBoxFor(m => m[i].submitted)
}
Upvotes: 1