0

私の質問に対するダリンの回答に基づいて、ドロップダウンからのユーザーの選択に基づいて複数のチェックボックスの選択を表示しますか? ドロップダウンの選択に基づいて複数のチェックボックスを表示しています。

これで、ユーザーが自分のページにあるフォーム(複数の入力を含む)を投稿したら、FormCollectionを使用してすべてのデータを収集します。そして、私が抱えている問題は、これらの選択されたチェックボックスの値をフォームコレクションからどのように引き出すことができるかということです。チェックボックスの数は、ドロップダウンからの選択によって変わるため、各チェックボックスの値を要求しても機能しないと思います。

誰かがこの問題で私を助けることができますか?

フローは以下のとおりです。

モデルのプロパティ

public class Subcategory
{
    public string Name { get; set; }
    public int ID { get; set; }
    public bool Flag { get; set; }
}

他のフォーム入力がある実際のビューでPartialViewを表示する:

 <div id="checkboxlist">
      @if (Model.SubCategories != null)
      {
           @Html.Partial("SubCategories", Model.SubCategories)
      }
 </div>    

PartialView SubCategories.cshtml

@model IEnumerable<MyProject.Entities.Subcategory>
@{
// we change the HTML field prefix so that input elements
// such as checkboxes have correct names in order to be able
// to POST the values back 
ViewData.TemplateInfo.HtmlFieldPrefix = "checkboxlist";
}
<span>subcategory</span>
<div id="subcategories" style="margin-left: 130px;margin-top: -20px;" data-role="fieldcontain">
   <fieldset data-role="controlgroup">
      @Html.EditorForModel()
   </fieldset>
</div> 

EditorTemplates Subcategory.cshtml

@model MyProject.Entities.Subcategory
<div class="editor-label">
   @Html.CheckBoxFor(c => c.Flag, new { type = "checkbox" })
   <label for="@Model.ID">@Model.Name</label>
   @Html.HiddenFor(c => c.Flag)
   @Html.HiddenFor(c => c.ID)
   @Html.HiddenFor(c => c.Name)
</div>

ドロップダウンの選択に基づいてチェックボックスを表示するjquery:

 $('#Category').change(function () {
    var subcategoriesUrl = $(this).data('subcategoriesurl');
    var categoryId = $(this).val();
    $('#checkboxlist').load(subcategoriesUrl, { category: categoryId });
 });
4

1 に答える 1

1

使用しないでくださいFormCollection。それは弱いタイプです。ビューモデルを使用します。このような:

[HttpPost]
public ActionResult Foo(MyViewModel model)
{
    // model.BusinessSubCategories should contain a list of Subcategory
    // where for each element you could use the Flag property to see if
    // it was selected or not
    ...
}

また、パーシャルで使用しているフィールドプレフィックス間に不整合があることに注意してください。

ViewData.TemplateInfo.HtmlFieldPrefix = "checkboxlist";

およびビューモデルコレクションプロパティ:Model.BusinessSubCategories。したがって、ポストバック時にデフォルトのモデルバインダーがこのプロパティを設定できるようにする場合は、プレフィックスを修正して正しいプロパティ名を使用するようにしてください。

于 2012-04-24T16:42:14.417 に答える