4

Tag私は現在、次のように定義されたオブジェクトを持っています:

public class Tag
{
    public string Name { get; set; }
}

これは、私が次のように定義しているモデルのコレクションプロパティです。

public class MyModel
{
    public string Name { get; set; }
    public IList<Tag> Tags { get; set; }
}

私の見解では、私は次のコードを持っています:

@using (Html.BeginForm())
{
    <div>
        @Html.LabelFor(m => m.Name)
        @Html.TextBoxFor(m => m.Name)
    </div>

    <div>
        <!--
        Here I'd like a collection of checkbox inputs, where the selected names
        get passed back to my controller via the IList<Tag> collection
        -->
    </div>

    <input type="submit" value="Submit" />
}

モデルのIListコレクションを介して、チェックボックスグループ(コメントで指定)で選択したアイテムを返すにはどうすればよいですか?

4

3 に答える 3

8

エディターテンプレートを使用する

チェックボックスを設定するには、クラスに別のプロパティを追加して、Tag選択されているかどうかを指定します。

public class Tag
{
    public string Name { get; set; }
    public bool IsSelected { set; get; }
}

これで、GETアクションから、モデルのプロパティにタグのリストを設定しTagsて、ビューに送信できます。

public ActionResult AddTag()
{
    var vm = new MyModel();

    //The below code is hardcoded for demo. you mat replace with DB data.
    vm.Tags.Add(new Tag { Name = "Test1" });
    vm.Tags.Add(new Tag { Name = "Test2" });

    return View(vm);
}

次に、エディタテンプレートを作成し、に移動してView/YourControllerName、というフォルダEditorTemaplatesを作成し、プロパティタイプ()と同じ名前で新しいビューを作成しますTag.cshtml

ここに画像の説明を入力してください

このコンテンツを新しいエディターテンプレートに今すぐ追加してください。

@model Tag
<p>
  <b>@Model.Name</b>   :
  @Html.CheckBoxFor(x => x.IsSelected) <br />
  @Html.HiddenFor(x=>x.Name)
</p>

EditorForメインビューで、 HtmlHelperメソッドを使用してエディターテンプレートを呼び出します。

@model MyModel
<h2>AddTag</h2>
@using (Html.BeginForm())
{
    <div>
        @Html.LabelFor(m => m.Name)
        @Html.TextBoxFor(m => m.Name)
    </div>    
    <div>  
      @Html.EditorFor(m=>m.Tags)         
    </div>    
    <input type="submit" value="Submit" />
}

これで、フォームを投稿すると、モデルにタグコレクションが追加され、選択したチェックボックスのプロパティの値がTrueになりますIsSelected

 [HttpPost]
public ActionResult AddTag(MyModel model)
{
   if(ModelState.IsValid)
   {
      //Check for model.Tags collection and Each items IsSelected property value.
      //Save and Redirect(PRG pattern)
   }
   return View(model);
}

このような

ここに画像の説明を入力してください

于 2012-08-22T12:44:28.790 に答える
1

これは、私が取り組んでいるサイトで行ったことと似ています。

この拡張機能を使用しました@Html.CheckBoxListFor()

お役に立てれば。

于 2012-08-22T12:38:39.077 に答える
0

タグモデルにboolIsCheckedプロパティを追加できる場合は、ループ内でEditorFor(またはCheckBoxFor)を使用できます。秘訣は、ビューのメインモデルを介してプロパティにアクセスできるように、(foreachではなく)インデクサーでforループを使用することです。次に、modelbinderが残りの処理を行うため、POSTアクションはTagsIsCheckedプロパティが正しい状態に設定されたMyModelを受け取ります。

モデル:

public class Tag
{
    public string Name { get; set; }
    public bool IsChecked { get; set; }
}

public class MyModel
{
    public string Name { get; set; }
    public List<Tag> Tags { get; set; }
}

景色:

@model MyMvcApplication.Models.MyModel
@using (Html.BeginForm())
{
    <div>
        @Html.LabelFor(m => m.Name)
        @Html.TextBoxFor(m => m.Name)
    </div>

    <div>
        @for (int i = 0; i < Model.Tags.Count; i++)
        {
            @Html.DisplayFor(x => Model.Tags[i].Name)
            @Html.EditorFor(x => Model.Tags[i].IsChecked)
        }
    </div>
    <input type="submit" value="Submit" />
}
于 2012-08-22T13:13:36.360 に答える