2016-04-21 13 views
-1

Das Problem ist, dass mein ViewModel z. 12 Artikel. Im Chrome-Browser kann ich sehen (Netzwerk -> Klick auf die Postback-Anfrage -> Kopfzeilen -> Formulardaten), dass alle 12 Items geänderte Werte haben, die ich im Controller speichern möchte. Aber in der Steuerung gibt es nur 9 Artikel, deren Inhalt ankommt. Wo sind die anderen drei? Die Kapazität des Modells ist 16, aber die anderen Elemente von 9 bis 15 sind auf Null gesetzt.Einige Elemente von ViewModel verloren zwischen View und Controller

Wie kann ich herausfinden, was während des Postbacks zwischen der Ansicht und dem Controller passiert?

aktualisiert

Ok, ich fand nun heraus, dass das Model doesnt alle Elemente enthält, aber die Informationen werden in der Anfrage an die Steuerung übertragen werden -> Form-Container. Mal sehen, wie die fehlenden Elemente wird auch auf die Model übertragen werden ...

Ansichtsmodell

public class ViewModel 
{ 

    public List<tool.Models.Issue> OpenIssue { get; set; } 
    public List<tool.Models.Issue> AllIssuesExceptOriginal { get; set; } 
    public List<tool.Models.Issue> ClosedIssue { get; set; } 
    public tool.Models.Site Site { get; set; } 
    public int ID { get; set; } 
} 

-Controller

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Edit(ViewModels.ViewModel ViewModel) 
    { 
    //Do something with the content of the ViewModel 
    } 

Ansicht (viel komplexer)

@for (int i = 0; i < Model.OpenIssue.Count(); i++) 
{ 

@Html.HiddenFor(modelItem => modelItem.OpenIssue[i].Id); 
//a lot more HiddenFor fields 


Model.AllIssuesExceptOriginal.Capacity = Model.AllIssuesExceptOriginal.Count; 
var History = Model.OpenIssue[i].Histories.Where(p => p.IssueId == Model.OpenIssue[i].Id).OrderByDescending(a => a.LastUpdate).First(); 

<tr class="Content_table">   
<td class="Content_Column"> 
     <div class="Content_all"> 
     <div class="History">@Html.DisplayFor(modelItem => History.Description)</div> 


      @if(Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Count() != null) 
      { 

       for (int a = 0; a < Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Except(Model.AllIssuesExceptOriginal.Where(l=>l.LastUpdate == DateTime.MinValue)).Count(); a++) 
       { 
       var OtherIssues = Model.AllIssuesExceptOriginal.Where(p => p.InternalNotes.Replace("Updated:", "") == Model.OpenIssue[i].Id.ToString()).Except(Model.AllIssuesExceptOriginal.Where(l=>l.LastUpdate == DateTime.MinValue)).OrderBy(p => p.LastUpdate).ToList(); 

        if(OtherIssues[a].Description != "noUpdate") 
        { 
        <div class="updated" style="position:relative" id="@i:@a:Description"> 
        <b>@Html.DisplayFor(modelitem=> OtherIssues[a].User.FirstName) @Html.DisplayFor(modelitem=> OtherIssues[a].User.LastName)</b> <span style="color:grey;">[email protected](modelitem=> OtherIssues[a].LastUpdate, "{0:dd.MM.yy HH:mm}") </span> <br /> 
        @Html.DisplayFor(modelItem => OtherIssues[a].Description, new { @class = "meeting" }) 

        <span style="float:right; "><img src="~/Images/ic_cancel_black_18dp.png" id="Description:@i:@a:@Model.AllIssuesExceptOriginal.FindIndex(p=>p.Id == OtherIssues[a].Id)" onclick="markActiveLinkDelete(this);"> 
        @Html.HiddenFor(modelItem => modelItem.AllIssuesExceptOriginal[Model.AllIssuesExceptOriginal.FindIndex(p=>p.Id == OtherIssues[a].Id)].Description) 
        </span> 

        </div> 
        } 

       } 
      } 

     <div class="updated" >@Html.TextAreaFor(modelItem => modelItem.AllIssuesExceptOriginal[Model.AllIssuesExceptOriginal.FindLastIndex(p=>p.InternalNotes.Replace("Updated:","") == Model.OpenIssue[i].Id.ToString())].Description, new { @class = "meeting" })</div> 
     @Html.HiddenFor(modelItem=>modelItem.AllIssuesExceptOriginal[Model.AllIssuesExceptOriginal.FindLastIndex(p=>p.InternalNotes.Replace("Updated:","") == Model.OpenIssue[i].Id.ToString())].InternalNotes) 
     </div> 


</td> 

} 

</table> 
</div> 
    <p> 
     <input type="submit" value="Save" name = "Save"/> 
     <input type="submit" value="Cancel" name = "Cancel"/>    
    </p> 
</fieldset> 
} 

Vielen Dank für Ihre Hilfe im Voraus.

+0

Code anzeigen. Wir können nicht erraten, was Sie falsch gemacht haben. –

+1

Welche Sammeleigenschaft ist nicht bindend? Wenn Sie sich nur auf "AllIssuesExceptOriginal" beziehen, erzeugt Ihr Code höchstwahrscheinlich nicht aufeinanderfolgende Indexer, so dass die Bindung fehlschlägt, wenn Sie keine Eingabe für den Indexer –

+0

hinzufügen. Danke, ich dachte nicht daran. –

Antwort

0

Um dies zu lösen, habe ich ein verstecktes Feld mit dem Indexer für jedes Element des Modells hinzugefügt.

Ansicht aktualisiert

Verwandte Themen