2017-05-02 3 views
0

Ich versuche, eine "Genehmigung Anwendung" anzuzeigen und zu bearbeiten. Wenn es ein Stück Papier wäre, hätte der obere Teil persönliche Angaben zu füllen. Der untere Teil wäre eine vertikale Liste von Fragen mit einem Leerzeichen am Ende jeder Zeile, um eine Antwort auf jede Frage zu schreiben.MVC @Razor Ansicht zum Bearbeiten von Modell mit Sammlung

Also mein Modell ist ein PermitApplication Objekt, das mit einem 'Requestor'-Objekt (Der Antragsteller) und einem Array von' Response'-Objekten, die Fragen mit einem String 'Answer'-Eigenschaft sind, enthält.

Nach einer Menge von Thrashing über komme ich zu der Schlussfolgerung vielleicht, was ich versuche, funktioniert nicht unter MVC. Geben Sie dieser Ansicht ein Modell, bearbeiten Sie die persönlichen Details, geben Sie die Antworten auf die Fragen ein und geben Sie das Modell zurück. Die Ansicht zeigt OK an, aber wenn die Übergabeschaltfläche gedrückt wird, werden dem PermitApplication-Objekt, das an den Controller zurückgegeben wird, nur die Personalangaben hinzugefügt. Das zurückgegebene Responses-Objekt ist null. Mein MVC-Fähigkeiten und Verständnis ist begrenzt, so ist meine Frage "Was ist der richtige Weg, um diese Situation anzugehen? Meine Ansicht (letzte Versuch) folgt:

@model PermitApply.Models.LclPermitApplication 

@using (Html.BeginForm()) 
{ 
    <div class="form-group"> 
    @Html.LabelFor(model => model.Requestor.FirstName, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.EditorFor(model => model.Requestor.FirstName, new { htmlAttributes = new { @class = "form-control" } }) 
     @Html.ValidationMessageFor(model => model.Requestor.FirstName, "", new { @class = "text-danger" }) 
    </div> 
</div> 




<h2>Permit Questions</h2> 
<table class="table"> 
    <tr> 
     <th> 
      Question Id 
     </th> 
     <th>Question</th> 
     <th>QuestionTypeId</th> 



    </tr>  


    @foreach (var item in Model.Responses) 
    { 
     <tr> 

      <td> 
       @Html.DisplayFor(p => item.QuestionId) 
      </td> 
      <td> 
       @Html.DisplayFor(p => item.Question) 
      </td> 
      <td> 
       @Html.DisplayFor(p => item.QuestionTypeId) 
      </td> 
      <td> 
       <div class="col-md-10"> 

        @Html.EditorFor(p => item.Answer, new { id = item.QuestionId }) 
        @Html.ValidationMessageFor(p => item.Answer, "", new { @class = "text-danger" }) 
       </div> 
      </td> 

     </tr> 
    } 
</table> 

<div class="form-group"> 
    <div class="col-md-offset-2 col-md-10"> 
     <input type="submit" value="Save" class="btn btn-default" /> 
    </div> 
</div> 

}

Antwort

0

Versuchen Sie, die foreach-Schleife unter Aktualisierung:

@count = 0; 

@foreach (var item in Model.Responses) 
{ 
    <tr> 

     <td> 
      @Html.DisplayFor(p => item.QuestionId) 
     </td> 
     <td> 
      @Html.DisplayFor(p => item.Question) 
     </td> 
     <td> 
      @Html.DisplayFor(p => item.QuestionTypeId) 
     </td> 
     <td> 
      <div class="col-md-10"> 

       @Html.EditorFor(p => item.Answer, new {name="Responses["+count+"].Answer", id = item.QuestionId }) 
       @Html.ValidationMessageFor(p => item.Answer, "", new { @class = "text-danger" }) 
      </div> 
     </td> 

    </tr> 
count=count+1; 

} 

Bitte lesen Sie MVC-Modell Bindung besser zu verstehen, wie MVC Werte bindet an senden Controller. Hoffe das hilft.

+0

Versucht dies keine Änderung. Befolgte die Methode in dem "Duplizieren Link" oben, das funktionierte. dh für (int i = 0; i p.Responsen [i] .Antwort funktioniert. Danke, dass Sie mich in die richtige Richtung weisen. –

+0

@BobClegg ok cool. – User3250

Verwandte Themen