2017-10-02 4 views
0

私は入力するチェックボックスリストを持っていますが、おそらく私はpage_loadを使用してそこからジョブを行うことができますか?Webフォームモデルバインディングロード時にCheckBoxListがあらかじめ選択されています

protected void Page_Load(object sender, EventArgs e) 
{ 
    //... 
    var query = logic.GetPlanCoverages(planName); 
    cbl_MemberCoverages.DataSource = coverages; 
    cbl_MemberCoverages.DataBind(); 
} 

しかしAsp.Netは結合モデルを導入していますので、今、私はこのことができます:

<asp:CheckBoxList runat="server" ID="cbl_MemberCoverages" 
SelectMethod="BindMemberCoverages" DataTextField="CoverageName" DataValueField="CoverageCode"> 
</asp:CheckBoxList> 

そして、コードビハインドで:

public IEnumerable<PlanCoveragesDomainModel> BindMemberCoverages() 
{    
    var planName = logic.GetShortPlanName(); 
    var query = logic.GetPlanCoverages(planName); 
    return query; 
} 

しかし... ...ありますがModel Bindingでまだ好きではないもの、またはフォームをあらかじめ用意しておく必要があるときに、正しく使用する方法を理解できないものがあります。

一般的なシナリオは、ユーザーのリストから編集する場合です。私は新しいページを開き、多くのフィールドを持つこのフォームを作成します。おそらく、ユーザーの1人は、すでにこれらのカバレッジのいくつかを割り当てています。しかし、現時点では、私が見つけた唯一の回避策は次のとおりです。

public IEnumerable<PlanCoveragesDomainModel> BindMemberCoverages([QueryString]string mode) 
    { 
     if (!"edit".Equals(mode, StringComparison.InvariantCultureIgnoreCase)) 
     { 
      var planName = logic.GetShortPlanName(); 
      var query = logic.GetPlanCoverages(planName); 
      return query; 
     } 

     var coverages = logic.GetPlanCoverages(CurrentModel.PlanName).Select(c => new ListItem(c.CoverageName, c.CoverageCode)).ToArray(); 
     cbl_MemberCoverages.Items.AddRange(coverages); 
     cbl_MemberCoverages.DataSource = coverages; 
     cbl_MemberCoverages.DataBind(); 

     foreach (ListItem listItem in cbl_MemberCoverages.Items) 
     { 
      listItem.Selected = CurrentModel.Coverages.Any(c => c.Value == listItem.Value); 
     } 
     return null; 
    } 

みんな?

+0

あなたは、モデルが結合して、ユーザーを編集しますが、別のユーザーの値は、フォームで事前に持っていたいですか?これは最初のモデルバインドの考え方に反しているようですが、コントロールにバインドする前にユーザーオブジェクトのデータを事前に準備する方が簡単かもしれません。 – Seano666

+1

私が理解しているかどうかを見てみましょう。「編集」をクリックして編集ページに行くと、ナビゲーションページで選択された「MemberCoverage」を編集ページで選択して表示しますか? –

+0

[Henryk Budzinski]まさに私が意味していたもの: –

答えて

1

CheckBoxListコントロールのOnDataBoundイベントを実装します。

<asp:CheckBoxList runat="server" ID="cbl_MemberCoverages" 
    SelectMethod="BindMemberCoverages" DataTextField="CoverageName" 
    DataValueField="CoverageCode" 
    OnDataBound="cblMemberCoverages_DataBound"> 
</asp:CheckBoxList> 

コード

protected void cblMemberCoverages_DataBound(object sender, EventArgs e) 
{ 
    var chkBoxList = sender as CheckBoxList; 
    var item = chkbox.Items.FindByValue(queryStringCoverageCode); 
    if(item != null) 
     item.Selected = true; 
} 
+0

私はなぜDataboundイベントを除外したのかわかりません。ありがとうございました :) –

関連する問題