2017-11-08 4 views
-1

私はこの問題がありました:Multiple checkboxes in razor (using foreach)剃刀の複数のチェックボックスは常に偽を返します

私はこの問題を抱えていました。それは私のためには機能しません。だからうまくいけば皆さんが助けることができます。

マイビュー:

@for(int i = 0; i < Model.Messages.Count; i++) 
{ 
    <tr> 
     <td> 
      @using (Html.BeginForm("UpdateMessage", "Home", FormMethod.Post)) 
      { 
       @Html.CheckBoxFor(x => Model.Messages[i].Activated, new {onchange = "this.form.submit();"}); 
       @Html.HiddenFor(x => x.Messages[i].Text); 
      } 
     </td> 
     <td>@Model.Messages[i].Text</td> 
     <td><button>Delete</button></td> 
    </tr> 
} 

のメッセージがあり、メッセージの一覧です:

public string Text { get; set; } 
public bool Activated { get; set; } 

コントローラーPOSTメソッド:

[HttpPost] 
public ActionResult UpdateMessage(Domain.Entities.Message message) 
{ 
    repository.UpdateMessage(message); 

    return RedirectToAction("Settings_Message", "Home"); 
} 

だから私は偽のブール値、空を取得します文字列。どうして?

+0

コードは意味をなさない。ビューのモデルがPOSTメソッドのモデルと一致しません。また、ビューに複数のフォームがあるのはなぜですか?ユーザーは一度に1つのフォームしか送信できません。そして、チェックボックスのidを恐れて練習してください。 –

+0

送信ボタンを使って単一のフォームの中にループを入れ、POSTメソッドでモデルをビューのモデルに合わせて変更します。そのモデルのプロパティの名前)、複数のアイテムを編集して、すべてのアクションを1つのアクションに戻すことができます。 –

答えて

1

これには次のコードを使用できます。それが動作します。

@using (Html.BeginForm("UpdateMessage", "Home", FormMethod.Post)) 
{ 
    @Html.CheckBox("Activated", Model.Messages[i].Activated, new { onchange = "this.form.submit();" }); 
    @Html.Hidden("Text", Model.Messages[i].Text);     
} 
+0

あなたはその日の私のヒーローです。これは動作します!注: 'BeginForm'は'

'に入れ、" For "項目を使わない場合はループします。 –

+0

これは無効なhtmlを生成し、悪いデザインを解決するためにはひどい方法です –

関連する問題