2017-10-24 33 views
-2

私はこのコードからデータをドロップダウンリストに表示する方法を知りません。私の問題を解決するために私ができる変更を教えてください。私はいくつかのビューを試したが、これはエラーを引き起こす。ASP.NET MVCのドロップダウンリストをSQL Serverデータベースからバインドするにはどうすればいいですか?

モデル:

public class Cities 
{ 
    public int cityid { get; set; } 
    public string Description { get; set; } 
} 

コントローラー:

public ActionResult Dropdownlist() 
{ 
    List<Citites> cityname= new List<Citites>(); 
    string constring = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString; 

    SqlConnection con = new SqlConnection(constring); 

    SqlCommand cmd = new SqlCommand("SELECT Cityid, Description FROM Cities", con); 

    con.Open(); 

    SqlDataReader rdr = cmd.ExecuteReader(); 

    while (rdr.Read()) 
    { 
     Citites ci = new Citites(); 
     ci.cityid = Convert.ToInt32(rdr["Cityid"]); 
     ci.Description = rdr[1].ToString();     
     cityname.Add(ci); 
    } 

    return View(cityname); 
} 

ビュー:

@model IEnumerable< RegisterForm_crud_mvc_.Models.Citites> 
@{ 
    ViewBag.Title = "Dropdownlist"; 
} 

<h2>Dropdownlist</h2> 

@Html.DropDownListFor(model => model.cityid, Model.citynanme) 
+0

あなたはこれまでに何を試しましたか? – Igor

+0

@Igor Html.DropDownListFor(モデル=> model.cityid、Model.citynanme)これを試しましたが、これはエラー –

+0

'試しましたが、これはエラー' <= [すべての例外の詳細が必要です] http://idownvotedbecau.se/noexceptiondetails/)。また、そのコード(あなたのビューテンプレートからのコード)を投稿してください。 – Igor

答えて

2

あなたはあなたのコード内の問題の束を持っています。あなたのビューはCityオブジェクトのリストに強く入力されており、Model.citynanmeを使用しようとしています。あなたのモデルは都市オブジェクトのリストであり、リストにはcitynameプロパティはありません(ただし、リストの各項目には含まれています)。

あなたが理想的に行うべきことは、ビューに必要なデータを表すビューモデルを作成することです。あなたの場合、選択されたオプション値を格納するプロパティと、SELECT要素のオプションを構築するために必要なデータが必要です。あなたの場合、それは都市のリストです。

public class MyViewModel 
{ 
    public List<SelectListItem> Cities { set;get;} 
    public int SelectedCityId { set;get;} 
} 

は、今すぐあなたのGETアクションで、あなたはこののオブジェクトを作成し、あなたのテーブルを読み取ることによって、都市の特性を移入し、ビューにビューモデルオブジェクトを送信します。

public ActionResult Create() 
{ 
    var vm = new MyViewModel(); 
    vm.Cities = GetCities(); 
    return View(vm); 
} 
private List<SelectListItem> GetCities() 
{ 
    var options = new List<SelectListItem>(); 
    var constring = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString; 
    using (var c = new SqlConnection(constring)) 
    { 
     using (var cmd = new SqlCommand("select Cityid, Description FROM Cities", c)) 
     { 
      c.Open(); 
      var rdr = cmd.ExecuteReader(); 
      options = new List<SelectListItem>(); 
      while (rdr.Read()) 
      { 
       var o = new SelectListItem 
       { 
        Value = rdr.GetInt32(rdr.GetOrdinal("Cityid")).ToString(), 
        Text = rdr.GetString(rdr.GetOrdinal("Description")) 
       }; 
       options.Add(o); 
      } 
     } 
    } 
    return options; 
} 

強くMyViewModelに型付けされたビューで、あなたがSelectListのパラメータとしてCitiesプロパティを使用しますHtml.DropDownListforヘルパーメソッドを使用します。

@model MyViewModel 
@Html.DropDownListFor(model => model.SelectedCityId, Model.Cities) 
+0

おかげさまで大変お世話になりました。しかし、私は質問があります。それはカスケードドロップダウンリストのために働くのですか?都市価値のベースに町を変更してください。 –

+0

最初のドロップダウンの 'change'イベントを聞いて、選択した値を読み込んであなたのサーバに送り、フィルタリングされたデータを取得してクライアントに返すサーバコードをいくつか持っています。あなたのajaxコールの成功イベントでは、json配列を繰り返し、li要素を作成し、2番目のドロップダウンを追加します。これを見てくださいhttps://stackoverflow.com/questions/43031292/make-cascade-dropdown-list-asp-net-mvc/43031665#43031665 – Shyju

+0

リンクuの言及にはajaxが含まれていますあなたはajaxとjqurey etaなしで別のものを教えてもらえますか? –

関連する問題