4

私はMVCにかなり慣れていないので、エディターテンプレートにドロップダウンを設定するための最良の方法を考えていましたか?

たくさんのドロップダウンを持つアプリケーションを構築していますが、それらのドロップダウンのデータは非常に静的です。現在、私はそれらすべてをデータベース内のテーブルに入れてから、それらをセッションにロードします。

次に例を示します。

私の見解:

   @{
        var widgettypes = Business.MySession.Current.WidgetTypes.ToSelectList(d => d.TypeName,
                                   d => d.WidgetTypeID.ToString(),
                                   " - Select - ");
    }
    <div class="editor-label">
        @Html.LabelFor(model => model.WidgetTypeID)
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.WidgetTypeID, @widgettypes)
        @Html.ValidationMessageFor(model => model.WidgetTypeID)
    </div>

ドロップダウンヘルパー:

    public static List<SelectListItem> ToSelectList<T>(
            this IEnumerable<T> enumerable,
            Func<T, string> text,
            Func<T, string> value,
            string defaultOption)
    {
        var items = enumerable.Select(f => new SelectListItem()
        {
            Text = text(f),
            Value = value(f)
        }).ToList();
        items.Insert(0, new SelectListItem()
        {
            Text = defaultOption,
            Value = "-1"
        });
        return items;
    }

ここSOで、ビューに選択リストを静的に作成する例をたくさん見てきました。

.netコードの静的列挙型からビューでそれらを作成するのがベストプラクティスですか、それとも現在の方法で作成するのが最善ですか?それともそれは問題ではありませんか?

何がうまくいくのかではなく、自分が何をすべきかを知りたいだけです。

4

1 に答える 1

6

私は個人的に、データベース駆動型が進むべき道だと思います。主に経験から、ルックアップに値を追加したいとし、すでにアプリケーションをデプロイしている場合、列挙型に新しい値を追加した後、コードを再デプロイする必要があります。それらがデータベース駆動型であるため、データベースに対して挿入クエリを実行するだけで、再デプロイは必要ありません。

ビュー内のデータベースをそのように呼び出すことはしませんが、それがベストプラクティスであるとは言えません。これはビューの責任ではなく、データを表示するだけで、追加のデータを照会する必要がないためです。

まず、次のように、モデルのドロップダウンリストに必要なアイテムを配置します。

public class YourModel
{
    public int WidgetTypeId { get; set; }
    public SelectList WidgetTypes { get; set; }
    //...rest of your model
}

次に、コントローラーのGETメソッドで(ビューを返す前に、ビューにあるコードをそのリストに入力します。

public ActionResult MyAction()
{
    YourModel model = new YourModel();

    model.WidgetTypes = Business.MySession.Current.WidgetTypes
        .ToSelectList(d => d.TypeName, d => d.WidgetTypeID.ToString(), " - Select - ");

    return View(model);
}

次に、あなたの見解では、次のようにします。

@Html.DropDownListFor(model => model.WidgetTypeID, Model.WidgetTypes)
于 2013-01-12T20:04:18.843 に答える