2016-04-06 22 views
1

電子メールをダウンロードできるアプリケーションで作業中です。私の見解では、チェックボックス/チェックボックスがチェックされている場合、私はこのメッセージをダウンロードするためにコントローラにIDを渡したいと思う。私はコードを説明しようとします:Asp.net mvc複数のチェックボックスの値をコントローラに渡す方法

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

@i名=「selectedIds [@i] .messageID」doesntのは、私がチェックした場合、そのが増加しているために良いことになるだろうに:第一第二と第四のメッセージそれは私のリストに最初の2つの要素だけを追加します。

コントローラ:

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

モデル:

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

私はそれは難しいイマイチだと思いますが、sollutionを見つける傾けます。助けることができる人に感謝します!私はこのような選択処理するために、このビューの新しいモデルを作成することをお勧めしますちょうどこのビューの(あるいはあなたが始めることができない場合)あなたのメッセージモデルを変更しないようにするに

+1

チェックボックスのポイントは何ですか?あなたのモデル内のものにはバインドされず、 'value'属性もありません。どのオブジェクトが選択されているかを指定するには、モデルに 'bool IsSelected'プロパティを追加し、' @Html.CheckBoxFor(m =

答えて

3

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

あなたのビューうあなたの投稿の方法になるでしょう

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

[HttpPost] 
public ActionResult DownloadData(IEnumerable<MessageSelectionViewModel> selectedMessages) 
{ 
    foreach (int messageId in selectedMessages.Where(m => m.IsSelected == true).Select(m => m.Message.Id)) 
    { 
    } 
    return View(...); 
} 
今、これらの新しいビューのリストはそうより次のようになりますオブジェクトこと210

もちろん大したことではない場合は、時間と労力を節約でき、IsSelectedをスティーブンスのようなモデルに追加するだけです。

関連する問題