0

Entity Framework を使用して、既存の Oracle データベースのいくつかのテーブルに基づいてモデルを構築する単純な ASP.NET MVC 3 サイトを構築しています (つまり、「データベース ファースト」の方法を使用してモデルを構築しました)。私は今、シンプルなブログ タイプのサイトを持っています。これは、多くの言語で MVC を学んでいるので、よく知っています。

自動生成されたビューの一部を変更したいと考えています。特に変更したいのは、テーブルの 1 つに「Visible」というフィールドがあることです。これは、表示アプリケーションが行を表示データとして使用する必要があるかどうかを示す単純な数値 (0 または 1) です。現在、自動生成される単純なテキスト フィールドがあります。

<div class="editor-field">
    @Html.EditorFor(model => model.VISIBLE)
    @Html.ValidationMessageFor(model => model.VISIBLE)
</div>

私がやりたいのは、これを True や False などの文字列値を持つドロップダウン ボックスに置き換えることです。アプリケーションは、0 のエントリを false として表示し、その逆も同様に表示する必要があります。ユーザーがトグルを切り替えたい場合は、ドロップダウンを使用してそれを行うことができ、送信をクリックしたときに数値の更新を行うことを理解できる必要があります。これはどのように行うことができますか?

ドロップダウンに 2 つ以上の値が入力される例を数え切れないほど見てきましたが、そのような場合、すべての個別の値を取得し、それらをリストに入れ、次にコントローラーにロジックを追加できることを理解しています。リストを ViewBag に追加します。ただし、私の場合、可能な数値は 2 つしかないため、より単純でより受け入れられる方法があるはずです。

どんな助けでも大歓迎です。

アップデート

Quinton の回答に従って、上記のコードをモデルに配置しようとしています。これが私の現在のモデルです:

    namespace CurrentActivityBlog
    {
        using System;
        using System.Collections.Generic;
        using System.Web.UI.WebControls;

        public partial class TBLCURRENTACTIVITY
        {
            public string TITLE { get; set; }
            public string DESCRIPTION { get; set; }
            public System.DateTime DATETIME { get; set; }
            public short VISIBLE { get; set; }
            public decimal ID { get; set; }

            public IEnumerable<SelectedListItem> PossibleValues { get; set; }

        public TBLCURRENTACTIVITY() {
          PossibleValues = new[] { new SelectListItem { Value = "0", Text = "Hidden"       },              
              new SelectListItem { Value = "1", Text = "Visible" } }; 
        }

        }
    }

このソリューションをビルドすることはできませんが、Visual Studio 2010 はそれを教えてくれます

「型または名前空間名 'SelectedListItem' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)」

ご覧のとおり、私は持っています

System.Web.UI.controls の使用

System.Web への参照を追加しました。私が忘れていること、または知っておくべきことはありますか (EF を使用して生成されたモデルが予想とは異なる動作をするなど)?

再度、感謝します。

4

1 に答える 1

1

それに対する1行の解決策は次のとおりです。

@Html.DropDownList(Model.VISIBLE.ToString(), new [] {new SelectListItem { Value = "0", Text = "Hidden"}, new SelectListItem { Value = "1", Text = "Visible"}}) 

しかし、おそらくビューにドメイン ロジックは必要ありません。したがって、可能な項目をモデルに (またはコントローラーから) 追加します。

    public class MyModel {
        public int VISIBLE { get; set; }
        public IEnumerable<SelectListItem> PossibleValues { get; set; }

        public MyModel() {
            PossibleValues = new[] { new SelectListItem { Value = "0", Text = "Hidden" }, new SelectListItem { Value = "1", Text = "Visible" } }; 
        }
    }

そしてあなたのかみそりコード:

    @Html.DropDownList(Model.VISIBLE.ToString(), Model.PossibleValues)

明らかに、「非表示」および「表示」の説明は、「偽」および「真」などに置き換えることができます。

Editor and Display Templateその特定のフィールドに対してと を作成することもできます。ここでScottGu のブログ投稿を確認し、「UI ヘルパー テンプレート サポート」を検索すると、エディター テンプレートの作成方法と特定のテンプレートを名前でレンダリングする方法が表示されます。

編集:

モデルが MVC プロジェクトの一部でない場合、MVC アセンブリにあるクラスを参照するには、明示的な追加参照が必要になります。ただし、次のように、コントローラーからモデル内の MVC アセンブリ タイプを初期化することで、これを回避できます。

    public class MyModel {
            public int VISIBLE { get; set; }
            public IEnumerable<SelectListItem> PossibleValues { get; set; }
    }

コントローラーアクションメソッド:

    public ActionResult Edit(int Id) {
        ...
        myModelInstance. PossibleValues = new[] { new SelectListItem { Value = "0", Text = "Hidden" }, new SelectListItem { Value = "1", Text = "Visible" } }; 
        ...
        Return View(myModel);
    }
于 2013-01-10T17:30:22.783 に答える