2012-07-31 54 views
0

我有遺留的代碼,我慢慢地移動到C#MVC。我將如何從數據表或數據集創建下拉列表?我不想創建屬性並遍歷列表,因爲我有太多古老的MS Access查詢來處理。MVC 3傳統數據庫或數據集下拉列表

控制器:

using (SqlConnection Connection = new SqlConnection(ConnectionString)) 
     { 
      string commandstring = "select column1 from table1"; 
      SqlCommand command = new SqlCommand(commandstring, Connection); 
      Connection.Open(); 
      SqlDataAdapter da = new SqlDataAdapter(); 
      DataSet ds = new DataSet(); 
      da.SelectCommand = command; 
      da.Fill(ds, "data1"); 
      Connection.Close(); 
     } 
+1

你應該從控制器分離出數據訪問到存儲庫,並返回一個對象(而不是數據集)到控制器。從那裏開始,創建Dropdownlist可以使用的ViewModel相對比較容易。如果你展示了更多的代碼,它將有助於定製解決方案。 – 2012-07-31 16:02:01

+0

我只想將數據集綁定到正常的html下拉列表。 – user999690 2012-07-31 17:14:40

+2

MVC沒有控件讓你「僅僅綁定一個數據集」。看我的DDL教程http://www.asp.net/mvc/tutorials/javascript/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc和http: //blogs.msdn.com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net-mvc.aspx – RickAndMSFT 2012-07-31 19:28:22

回答

1

正如喬治說,我會建議移動域邏輯到數據訪問層,並使用實體保持從查詢所返回的對象。您可以使用Dapper,它允許您使用原始SQL查詢並將結果映射到模型。其性能與SqlDataReader相同。這裏是一個擴展方法,它將獲取模型列表並將其轉換爲下拉列表。

public static IEnumerable<SelectListItem> ToSelectList<T, TTextProperty, TValueProperty>(this IEnumerable<T> instance, Func<T, TTextProperty> text, Func<T, TValueProperty> value, Func<T, bool> selectedItem = null) 
{ 
    return instance.Select(t => new SelectListItem 
    { 
     Text = Convert.ToString(text(t)), 
     Value = Convert.ToString(value(t)), 
     Selected = selectedItem != null ? selectedItem(t) : false 
    }); 
} 

然後你就可以使用如下代碼...

var list = SomeQuery(); 
list.ToSelectList(x => x.Name, x => x.id, x => x.id == selectedId);