web-dev-qa-db-ja.com

データベースからのASP.NET MVCドロップダウンリスト

わかりましたので、私はこのMVCワールド全体に慣れていないのですが、物事を成し遂げるのにかなり良い方法であるようで、ここで機能させようとしています。

問題は、SQLデータベースのテーブルから登録ページの簡単なドロップダウンフォームにデータを取得できないことです。

ものをどこに置くか、テーブルを開くためのコードを書く場所、idを選択する場所、response.writeを置く場所、そしてそれをビューに送るにはどうすればよいのかわかりません。

私のモデルはこれです:

    public class users
{
    public string name {get; set;}
    public int user_id {get; set;}
}

私のコントローラーはこれです:

    [HttpGet]
    public ActionResult ListUser()
    {
        return View();
    }

そして私の見解はこれです:

@model Community.Models.users

2日間グーグルで検索して、YouTubeでいくつかのビデオを見ましたが、役に立たないので見つけられません。ここで、ある程度の知識をお持ちですか?そして、私が持っているかもしれないより多くの質問を閲覧できるいくつかの良いチュートリアルやフォーラムを教えてください


このプロジェクトにはまだ運がありません。

フォームを作成していますが、そのフォーム内にdb-loop(IEnumerable)が必要です。しかし、現在のモデルはIEnumerableではありません。私はほとんど立ち往生しており、たくさんのチュートリアルを見ましたが、それらはすべて1つの接続をリストしていますが、2つのモデルが必要な場合はどうなりますか?

ここに私のコントローラーがあります。ビューにリストを渡す必要があると思いますか?

    public ActionResult Registration()
    {
        return View(db.users.ToList());
    }

IEnumerableモデルを使用せずにビューでそのリストを取得するにはどうすればよいですか?

@neoistheone、あなたの例は私をあまり助けませんでした、私のDBは次のように開きます:

private DataBaseContext db = new DataBaseContext();

そして、私は方法がわかりませんが、それは接続を開きます。私はこれまで何時間も試してみましたが、その愚かな、あまり長い間眠っていませんでした!

私はASP-Classic fyiのプログラミングに慣れていますが、これは最新の言語とOOPのプログラミングに関する知識をアップグレードする最初の真剣な試みです。

15
Tobias

SelectListをモデルに追加します。

public SelectList DropDownList { get; set; }

そのコレクションのクラスを構築します。

public class MyListTable
{
    public string Key { get; set; }
    public string Display { get; set; }
}

次に、コントローラーで、データベースからMyListTableクラスのデータをロードします。

var list = new List<MyListTable>();

using (SqlConnection c = new SqlConnection(cString))
using (SqlCommand cmd = new SqlCommand("SELECT KeyField, DisplayField FROM Table", c))
{
    using (SqlDataReader rdr = cmd.ExecuteReader())
    {
        while (rdr.Read())
        {
            list.Add(new MyListTable
            {
                Key = rdr.GetString(0),
                Display = rdr.GetString(1)
            });
        }
    }
}

var model = new users();
model.DropDownList = new SelectList(list, "Key", "Display");

最後に、モデルをビューに送信する必要があります。

return View(model);

Razorでこれを表示できます:

@Html.DropDownListFor(m => Model.DropDownList);

もちろん、これらの名前をより良い名前にすることもできますが、アイデアは得られます。

21
Mike Perrenoud

すでに素晴らしい答えがありますが、ここに別のアプローチがあります。

userをモデルとして、ListUserViewModelをビューモデルとして、UserControllerをコントローラーとして使用します。 view-modelの機能は、不要なプロパティをモデルクラスに追加することなく、コントローラーからページに表示するために必要なすべての情報を保持することです。あなたのケースでは、データベースからドロップダウンリストへのユーザーのリスト。

モデル:

public class User     //By the way use singular when naming a class
{
    public string name {get; set;}
    public int user_id {get; set;}
}

ビューモデル

public class ListUserViewModel
{
    public list<User> Users{get; set;}
}

コントローラ

public class UserController : Controller
{
    private DataBaseContext db = new DataBaseContext();

    [HttpGet]
    public ActionResult ListUser()
    {
        var users = db.Users.ToList();

        var viewModel = new ListUserViewModel { Users = users };

        return View(viewModel);
    }
}

ビューとして、ユーザーとしてではなくListUserViewModelをモデルとして使用するようになりました

@model Community.Models.ListUserViewModel

そしてドロップダウン

@Html.DropDownListFor(m => m.Users, new SelectList(Model.Users, "user_id", "name"), " ")

説明:

選択リストデータソースとしてModel.Usersを使用するユーザーのドロップダウンリストを作成しています。 "user_id"は選択したユーザーの値として、"name"は表示ラベルとして。最後の引数(空の文字列" "を置く)は、選択前にドロップダウンが表示するデフォルト値です。

これがあなたや誰かに役立つことを願っています。

8
AIM

これを試して、

モデル

public string CoutryID { get; set; }
public List<SelectListItem> CountryList { get; set; }

リストを埋めるコントローラーメソッド

public List<Country> getCountryList()
        {
            using (QRMG_VendorPortalDataContext _context = new QRMG_VendorPortalDataContext())
            {
                return (from c in _context.Countries
                        where c.IsDeleted == false
                        select c).ToList();
            }
        }

ビューのドロップダウンリスト

 @Html.DropDownListFor(m => m.CoutryID,
         new SelectList(Model.CountryList,
                        "CoutryID", "Value"))
5
Jeet Bhatt

ASP.Net MVCを初めて使用する場合は、MVCパターンがどのように機能するかを示す非常に優れたチュートリアルです。

MVC3: http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/intro-to-aspnet-mvc-
MVC4: http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4 =

ダウンロードするサンプルコードは次のとおりです。 http://code.msdn.Microsoft.com/Introduction-to-MVC-3-10d1b098

これは役立つビデオです。 http://www.asp.net/mvc/videos/mvc-1/conference-presentations/creating-nerddinnercom-with-Microsoft-aspnet-model-view-controller-mvc

3
Tobias

私はこのシステムが動作することを発見します(そしてViewBagの使用を避けます):

モデルの表示:

public class YourViewModel
{
    // This could be string, int or Guid depending on what you need as the value
    public int YourDropdownSelectedValue { get; set; }
    public IEnumerable<SelectListItem> YourDropdownList { get; set; }
}

コントローラー:

// Get database values (by whatever selection method is appropriate)
var dbValues = db.YourEntity.ToList();

// Make Selectlist, which is IEnumerable<SelectListItem>
var yourDropdownList = new SelectList(dbValues.Select(item => new SelectListItem
{
    Text = item.YourSelectedDbText,
    Value = item.YourSelectedDbValue
}).ToList(), "Value", "Text");

// Assign the Selectlist to the View Model   
var viewModel = new YourViewModel(){
    // Optional: if you want a pre-selected value - remove this for no pre-selected value
    YourDropdownSelectedValue = dbValues.FirstOrDefault(),
    // The Dropdownlist values
    YourDropdownList = yourDropdownList
};

// return View with View Model
return View(viewModel);

およびビュー:

@Html.DropDownListFor(a => a.YourDropdownSelectedValue, Model.YourDropdownList, "select this text - change this to null to exclude", new { @class = "your-class" })
3
RickL

これはデータベース内の私のテーブルです

enter image description here

私のアクションコントローラーを見てください

    // GET: Letters
    public ActionResult Index()
    {
        ViewBag.LetterStatus = new SelectList(LetterStatusService.GetAllLettersStatus(), "Id", (CultureHelper.GetCurrentCulture() == "ar") ? "NameArabic" : "Name", Request.QueryString["LetterStatus"]);
        return View();
    }

そしてビューで

  @Html.DropDownList("LetterStatus")

私が使用したコンストラクタは

new SelectList(
    list<Objlect> myListFromDatabase,
    string PropertyNameOfValueInHtml,
    string PropertyNameOfDesplayInHtml,
    string SelectedItemValue 
);

この行Request.QueryString["LetterStatus"]選択したアイテムをQuerySrting内で送信するため

CurrentCultureに基づいて、表示する列を選択しました

結果は enter image description here

しかし、これを行うための最良の方法は、アイテムを取得または作成してから、反復処理してアイテムを手動で選択タグを生成することだと思います。 この答え でこのアプローチを詳しく説明しました

これがあなたを助けることを願っています

2