Заполнение ListBox в ASP.NET MVC из SQL CE (C #) - PullRequest
0 голосов
/ 28 ноября 2011

Я не могу найти пример, который бы отвечал моим потребностям, поэтому я спрашиваю вас, ребята.

Я пытаюсь заполнить ListBox на моем веб-сайте контентом из базы данных SQL CE.

Я использовал Привязка данных Asp.Net MVC DropDownList в качестве примера для создания моего ListBox.

Теперь я нашел dedend и мог бы использовать некоторую помощь, вот что я получил:

Index.aspx

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
   <h2>Headline</h2>
   <% using (Html.BeginForm())
      { %>
       <%= Html.ListBoxFor(x => x.SelectedItemId, new SelectList(Model.Items, "Value", "Text"))%>
       <br /><input type="submit" value="Show" style="width: 72px" />
   <% } %>
</asp:Content>

HomeController.cs

public ActionResult Index()
    {
        var model = new ItemsViewModel();
        using (SqlCeConnection con = new SqlCeConnection(@"Data Source=|DataDirectory|\RSSdb.sdf;Persist Security Info=False"))
        {
            con.Open();

            string cmdString = string.Format("SELECT Name, ID FROM TableIndex WHERE (Active = N'true')");
            using (SqlCeCommand cmd = new SqlCeCommand(cmdString, con))
            {
                using (SqlCeDataReader dataRead = cmd.ExecuteReader())
                {
                    model = new ItemsViewModel                                     
                    {                                                              
                        Items = new[]                                              
                        {                                                            
                            new SelectListItem { Value = "Foo", Text = "Foo" } ,   
                            new SelectListItem { Value = "Bar", Text = "Bar" }     
                        }                                                          
                    };                                                              
                }
            } 
        }
        return View(model);
    }

ItemsViewModel.cs

public class ItemsViewModel
{
    public string SelectedItemId { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

Теперь мне нужно иметькод в HomeController.cs будет примерно таким:

model = new ItemsViewModel                                     
{                                                              
    Items = new[]                                              
    {      
       While(dataRead.Read())
       {                                                      
       new SelectListItem { Value = dataRead["ID"], Text = dataRead["Name"] };
       }   
    }                                                          
};

Но это не работает, и я понятия не имею, как еще это сделать, вся помощь приветствуется.

1 Ответ

0 голосов
/ 29 ноября 2011

Вы, вероятно, уже поняли, что не можете поместить цикл while в инициализатор массива.Один из подходов к решению этой проблемы заключается в создании метода, который будет создавать список для вас, например, так:

public IList<SelectListItem> GetSelectListItems()
{
    IList<SelectListItem> items = new List<SelectListItem>();
    using (SqlCeConnection con = new SqlCeConnection(@"Data Source=|DataDirectory|\RSSdb.sdf;Persist Security Info=False"))
    {
        con.Open();

        string cmdString = "SELECT Name, ID FROM TableIndex WHERE (Active = N'true')";
        using (SqlCeCommand cmd = new SqlCeCommand(cmdString, con))
        {
            using (SqlCeDataReader dataRead = cmd.ExecuteReader())
            {
                while(dataRead.Read())
                {
                    items.Add(new SelectListItem
                      {
                          Value = dataRead["ID"],
                          Text = dataRead["Name"]
                      });
                }
            }
        } 
    }
    return items;
}

Тогда ваше действие может быть таким простым:

public ActionResult Index()
{
    var model = new ItemsViewModel
    {
        Items = GetSelectListItems()
    };
    return View(model);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...