2016-04-06 14 views
1

übergeben Im arbeiten an einer Anwendung, die E-Mails herunterladen können. Meiner Ansicht nach, wenn Kontrollkästchen/Kontrollkästchen aktiviert sind, möchte ich eine ID an den Controller übergeben, um diese Nachrichten herunterzuladen. Ich werde versuchen, mit dem Code zu erklären:Asp.net mvc wie man mehrere Checkbox-Werte an den Controller

@using (Html.BeginForm("DownloadData", "Messages", FormMethod.Post)) 
    { 
     <table class="table table-bordered table-hover"> 
      @for (int i = 0; i < Model.Count; i++) 
      { 
      <tr> 
       <td><input type="checkbox"  
       name="selectedIds[@i].messageID"/></td> 
       <td>@Model[i].messageFrom</td> 
       <td>@Model[i].messageSubject</td> 
       <td>@Model[i].messageDate</td> 
      </tr> 
      } 
     </table> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" class="btn btn-default" value="Download" /> 
     </div> 
    } 

Der @i in name = „selectedIds [@i] .messageID“ gut sein tut, weil seine Erhöhung und wenn ich überprüfen: 1. die 2. und die 4. Meldung , es werden nur die ersten zwei Elemente zu meiner Liste hinzugefügt.

Der Controller:

[HttpPost] 
    public ActionResult DownloadData(List<MessagesModels> selectedIds) 
    { 
     return View(...); 
    } 

Das Modell:

public class MessagesModels 
    { 
    public int messageID { get; set; } 
    public string messageSubject { get; set; } 
    ... 
    } 

Ich denke, es ist nicht schwer, aber kann nicht die sollution finden. Danke für die, die helfen können!

+1

Was ist der Punkt der Checkbox? Es ist an nichts in Ihrem Modell gebunden und hat nicht einmal ein "Wert" -Attribut. Wenn Sie angeben möchten, welche Ihrer Objekte ausgewählt sind, fügen Sie Ihrem Modell eine 'bool IsSelected'-Eigenschaft hinzu und verwenden Sie' @ Html.CheckBoxFor (m =

Antwort

3

Um Ihre Nachricht Modell ändert nur für diese Ansicht zu vermeiden (oder, wenn Sie nicht in der Lage sind, mit zu beginnen) Ich Erstellen eines neuen Modells für diese Ansicht, wie diese Auswahl zu handhaben würde empfehlen:

würde
public class MessageSelectionViewModel 
{ 
    public MessagesModels Message { get; set; } 
    public bool IsSelected { get; set; } 
} 

Ihre Ansicht jetzt eine Liste dieser neuen Ansicht Objekte werden so eher wie diese aussehen würde:

<td>@Html.CheckBoxFor(item => item[i].IsSelected)</td> 
<td style="display:none;">@Html.HiddenFor(item => item[i].Message.Id)</td> 
<td>@Model[i].Message.messageFrom</td> 
<td>@Model[i].Message.messageSubject</td> 
<td>@Model[i].Message.messageDate</td> 

Ihre post-Methode würde:

[HttpPost] 
public ActionResult DownloadData(IEnumerable<MessageSelectionViewModel> selectedMessages) 
{ 
    foreach (int messageId in selectedMessages.Where(m => m.IsSelected == true).Select(m => m.Message.Id)) 
    { 
    } 
    return View(...); 
} 

Natürlich, wenn es keine große Sache ist, könnten Sie etwas Zeit und Mühe sparen und einfach IsSelected zu Ihrem Modell hinzufügen, wie Stephen vorgeschlagen hat.

Verwandte Themen