2

メインビュー内にパーシャルビュー [_SearchProduct] があります。[product] ビューとしましょう。Partialview には、 [検索] ボタン 1 つで、会社別検索、製品別検索など、さまざまなセクションに区切られた多数のチェックボックスがあります。

ユーザーは複数のチェックボックスを選択できます。ユーザーが [検索] ボタンをクリックすると、選択したすべてのチェックボックスの ID をコントローラー アクションに渡し、ユーザーの選択を考慮してページを再レンダリングする必要があります。選択したチェックボックス ID をコントローラー アクションに渡す方法を教えてください。

私の部分的な見解は以下のようなものです:

<fieldset>
<legend>By Company</legend>
<table  style="border-style: none;">
   <tr>
        @{
            int i = 0;
            foreach (var item in Model.CompanyName)
            {

                i = i + 1;
            <td style="border-style: none;text-decoration:none;" >
                @Html.CheckBox("chkCompany",new {id="chkCompany_" + Model.CompanyId.Tostring()}) @Model.CompanyName
            </td>
                if (i == 5)
                {
                    @:</tr><tr>
                    i = 0;
                }

            }
        }
    </tr>
</table>
</fieldset>

<fieldset>
<legend>By Product</legend>
<table  style="border-style: none;">
    <tr>
        @{
             i = 0;
            foreach (var item in Model.Product)
            {
                i = i + 1;
            <td style="border-style: none;text-decoration:none;" >
                @Html.CheckBox("chkProduct",new {id="chkProduct_" + Model.CompanyId.Tostring()}) @Model.ProductName
            </td>
                if (i == 10)
                {
                    @:</tr><tr>
                    i = 0;
                }

            }
        }
    </tr>
</table>
</fieldset>
  • チェックボックスは動的です
  • チェックボックス ID は、フィルタリングを行う際に基づいて、それぞれのテーブルの主キーを表します。

ご指導お願いします>>

4

2 に答える 2

1

つまり、(会社/製品の)名前とIDを含む構造があるように思えます。

次のようなビューモデル構造を作成します

public class PartialViewModel //Make sure this is included in your main view model
{
    public List<ObjectsToInclude> Companies { get; set; }
    public List<ObjectsToInclude> Products { get; set; }
}

public class ObjectsToInclude //Give this a better name
{
    public string Name { get; set; }
    public string Id { get; set; }
    public bool Include { get; set; }
}

次に、それらをバインドするためにあなたはすることができます

for (int i =0; i<Model.Companies.Count(); i++)
{
   <td style="border-style: none;text-decoration:none;" >
            @Html.HiddenFor(m => m.Companies[i].Id)
            @Html.CheckBoxFor(m => m.Companies[i].Include) @Model.Companies[i].Name
   </td>
   if (i == 5)
   {
       @:</tr><tr>
       i = 0;
   }

}

次に、投稿がのパラメータPartialViewModel(またはMainViewModelのインスタンスを含むものPartialViewModel)を取得すると、会社と製品のリストがバインドされます。リストをループして、チェックされているもののそれぞれのIDを取得して含めることができます。

編集:単一のコンマ区切りの配列を投稿する場合は、チェックボックスのonclickイベントを作成し、チェックボックスがクリックされるたびに非表示の入力の値を設定することで可能になります。ただし、コードはJavaScriptが有効になっている場合にのみ機能します。カンマ区切りの文字列が必要な場合は、私が提案したビューモデルを使用してサーバー側で作成できます。

string companyIds = String.Join(",", model.Companies
    .Where(company => company.Include)
    .Select(company => company.Id));
于 2012-05-10T04:02:05.783 に答える
0

http://dotnetnsqlcorner.blogspot.in/2012/09/multiple-checkboxes-in-mvc-3-and-post.html

于 2012-10-01T05:04:12.457 に答える