3

ビット値 (true/false) を持つテーブルがあります

テーブル定義:

CharacterID int 
isActive    bit 
UserId  uniqueidentifier

私には2つの問題があります:

  1. ドロップダウンの編集ビューで既存の選択されたオプションを表示する方法
  2. 値 (yes/No) を true および false としてデータベースに保存する必要があります。

これが私がこれまでに試みたことです:

<div class="editor-label">
    @Html.LabelFor(model => model.IsActive)
</div>
<div class="editor-field">
        @Html.DropDownList("", new SelectListItem[] { new SelectListItem() { Text = "Yes", Value = "true", Selected = Model.IsActive }, new SelectListItem() { Text = "No", Value = "false", Selected = !Model.IsActive }})
</div>
4

2 に答える 2

2

model.IsActive が次のように宣言されていると仮定しますbool

CheckBox を使用すると、ユーザーにとってもう少し直感的になり、必要なクリック数が減るのではないでしょうか? その場合、次を使用できます。

@Html.EditorFor(model => model.IsActive)

本当にドロップダウンが必要な場合は、この SO が機能する実装を提供する可能性があります: https://stackoverflow.com/a/4036922/1373170

あなたの文脈に当てはめると、私はそれが次のようになると信じています:

 @Html.DropDownListFor(model => model.IsActive, new SelectList(new SelectListItem[] { new SelectListItem() { Text = "Yes", Value = "True" }, new SelectListItem() { Text = "No", Value = "False"}}, model.IsActive.ToString())

さて、データベースに保存するために、EF、L2Sなどを使用しているかどうかを知る必要があります。しかし、コントローラーに保存用に設定されたアクションが既にあると思います。その場合、モデルのインスタンスをパラメータとしてすでに受け取っている可能性があります。DropDownList の代わりに DropDownListFor を使用すると、モデルは MVC のデフォルトによって自動的にバインドされModelBinder、それをデータベース エンティティにマップして保存できるはずです。

于 2012-07-07T02:21:55.673 に答える
0

これを機能させるには、ドロップダウンとビューモデルのプロパティを設定する必要があることがいくつかあります。

1) ビュー モデル:

public class MyModel
    {
        public MyModel()
        {            
            BoolSelectList = new List<SelectListItem>(); 
        }

        public int CharacterID { get; set; }
        public bool isActive   { get; set; }
        public Guid UserId  { get; set; }
        public IList<SelectListItem> BoolSelectList { get; set; }
    }

2)コントローラーでは、ブール値とリストに値を割り当てる必要があります

public MyModel viewmodel = new MyModel();
// Set other properties of viewmodel
// ....
// Set Drop-down List values
 viewModel.BoolSelectList = new SelectList(new SelectListItem[] { new SelectListItem()                   { Text = "Yes", Value = "True" }, new SelectListItem() { Text = "No", Value = "False"}};

3)あなたの見解では:

@Html.LabelFor(model => model.isActive, "Is Active ")
@Html.DropDownListFor(model => model.isActive, Model.BoolSelectList, model.IsActive.ToString())

Post アクションでは、IsActive の値は選択に応じて True/False になります。

于 2012-07-07T02:55:08.763 に答える