2017-07-12 6 views
0

VS.2017コミュニティを使用してASP.NET Core 1.1(MVC)でWebアプリケーションを構築しています。その中に私はチェックボックスのリストを表示しなければならないビューを持っていますし、フォームが提出されると、モデルはチェックされたチェックボックスのリストを含んでいます。ただし、POSTが完了すると、他のプロパティは正常にパスされますが、リスト<プロパティは正しい長さ(各チェックボックスに1つずつマークされています)が、のIsCheckedプロパティは、チェックボックスチェックした。ビューに渡されASP.NETコアで動作するCheckBoxリストを取得できません

マイビューモデルは次のようになります。

public class UserPermissionsViewModel { 
    public string Id { get; set; } 
    public string UserName { get; set; } 
    public List<CheckboxListItem> PermissionList { get; set; } 

    public UserPermissionsViewModel() { 
     PermissionList = new List<CheckboxListItem>(); 
    } 
} 

public class CheckboxListItem { 
    public int ID { get; set; } 
    public string Display { get; set; } 
    public bool IsChecked { get; set; } 
} 

そして、私はチェックボックスのリストをレンダリングビューの関連部分は次のようになります。

@model Models.UserPermissionsViewModel 

@{ // code block in the middle of the view, not at the top! 
    foreach (CheckboxListItem cbitem in Model.PermissionList) { 
     <div class="checkbox"> 
      <div class="form-inline col-md-offset-2"> 
       <input type="hidden" asp-for="@Model.PermissionList[i].ID" /> 
       <input type="hidden" asp-for="@Model.PermissionList[i].Display" /> 
       <input type="checkbox" asp-for="@Model.PermissionList[i].IsChecked" value="@Model.PermissionList[i].IsChecked" /> 
       <label asp-for="@Model.PermissionList[i].ID">@Model.PermissionList[i].Display</label> 
      </div> 
     </div> 
    } 
} 

とをポストコントローラのアクション(簡略化):

[HttpPost] 
[ValidateAntiForgeryToken] 
public IActionResult PermissionAssignToUser(UserPermissionsViewModel model) 
{ 
    if (ModelState.IsValid) { 
     // it gets here but the model.PermissionList pty has ZERO length. 
    } 
} 

実際に値リストを取得するには例えば、ID = 1のチェックボックスが真で、ID = 3のチェックボックスが真であることを示します。これまでのところ、私はそれらのすべてを得るが、実際のチェックボックスの状態ではなく、値が偽である。

UPDATE#3 くらいの裁判の後、私は実際にそれが動作するようになったとチェックボックスの状態は、POSTアクションメソッドに渡されていなかった理由が分かりました。あなたはチェックボックス型のための私のinputタグヘルパーの上に見ることができる場合

だけではなくプロパティASP-のためだけでなく、valueプロパティを持っています。私はそれを使って(ビューがレンダリングされたとき)現在の値を表示すると思った。しかし、(またはチェック)のプロパティにasp =プロパティを指定した場合、POSTアクションメソッドは、チェックボックスの実際の状態に関係なく常にfalseを受け取ります。

チェックボックス型のための一方、もしあなたが唯一のASP-ためプロパティ、その後、チェックボックスの状態が正しくPOSTアクションメソッドにモデルを介して通信さを指定

だから以下、この1のために上記のチェックボックスの入力を交換すると、実際に問題を解決:チェックボックスの状態はに渡されていなかったWHY

<input type="checkbox" asp-for="@Model.PermissionList[i].IsChecked" /> 
+0

をあなたはCheckBoxListのを実装する方法を説明し、質問の数があります。ここで私の以前の答えは、ネットコアで動作するはずですhttps://stackoverflow.com/questions/21841428/how-to-bind-checkbox-values-to-a-list-of-ints/21842127#21842127要点は2つのリスト、すべての値を維持するには1、チェックされた値を維持するには1が必要です。 – Fran

+0

@Fran実際には、上記の私の答えと一緒に、私はただ一つのリストだけで動作するようになった。投稿では、すべてのチェックボックスのリストが実際の状態(チェックされているかチェックされていない)で表示されています。 –

+0

問題は、すべての情報を渡す必要はないということです。すべてのチェックボックスに同じ名前を付けると、htmlは複数の値を配列として渡します。ポストに戻された配列値によってチェックされた値が分かります。これらの余分な隠しフィールドはすべて必要ありません。 – Fran

答えて

0

くらいの裁判の後、私は実際にそれが動作するようになったと判明しました事後対応方法。あなたはチェックボックス型のための私のinputタグヘルパーの上に見ることができる場合

だけではなくプロパティASP-のためだけでなく、valueプロパティを持っています。私はそれを使って(ビューがレンダリングされたとき)現在の値を表示すると思った。しかし、(またはチェック)のプロパティにasp =プロパティを指定した場合、POSTアクションメソッドは、チェックボックスの実際の状態に関係なく常にfalseを受け取ります。

チェックボックス型のための一方、もしあなたが唯一のASP-ためプロパティ、その後、チェックボックスの状態が正しくPOSTアクションメソッドにモデルを介して通信さを指定

だから、実際に問題解決の下に、この1について上記のチェックボックスの入力を置き換える:

<input type="checkbox" asp-for="@Model.PermissionList[i].IsChecked" /> 
関連する問題