2015-08-27 3 views
5

Ich habe eine Ansicht, die eine Boolesche (derzeit standardmäßig auf 0) in einem Box-Format in der Ansicht, die ich nicht aktivieren kann, als wahr und auch wollen Geben Sie Text in das Ergebnisfeld ein, um zum Controller zurückzukehren und beide Änderungen in einer Tabelle zu speichern. Kann mir jemand bitte erklären, was ich tun muss, damit diese Funktionalität funktioniert?Aktivieren Sie Boolean und geben Sie Text in Sicht und dann zurück zum Controller - MVC

enter image description here

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); 
    } 

Ansicht

@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> 

Modell

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; } 
} 
+0

'@ Html.DisplayFor (ModelItem => item.result) -> @ Html.TextBoxFor (item => item.result)' – Igor

+0

dank @Igor, eine Idee auf, was mit dem boolean zu tun? – cg91

+0

Ich denke, Sie sind ein wenig zu weit weg für eine einfache Antwort .. selbst wenn Sie das Kontrollkästchen aktivieren und Ergebnis eingeben müssten Sie die meisten der Ansicht neu schreiben und schreiben Sie alle Controller-Code. Es gibt viele Beispiele dafür, wie man eine Liste von Objekten bearbeitet, Sie können nach 'Edit List MVC' suchen und einen suchen, der – JamieD77

Antwort

1

eine EditorTemplate für Typerstellen.

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> 

und in der Hauptansicht

@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" ../> 
} 

und ein Verfahren schaffen, um

[HttpPost] 
public ActionResult P1A1Mark(IEnumerable<MarkModel>model) 

Alternativ posten können Sie eine for Schleife in der Ansicht verwenden (das Modell muss IList<T> sein)

for(int i = 0; i < Model.Count; i++) 
{ 
    .... 
    @Html.CheckBoxFor(m => m[i].submitted) 
} 
Verwandte Themen