ASP.NET MVC Раскрывающийся список - PullRequest
2 голосов
/ 24 февраля 2010

Я новичок в ASP.NET MVC и пытаюсь связать выпадающий список с данными из базы данных. Я делаю компьютерное приложение для калькуляции пакетов, в основном пользователи могут выбрать компоненты, которые он / она хочет, в свой компьютерный пакет из выпадающего списка, а затем отправить заказ по электронной почте. Компоненты должны поступать из базы данных.

Я не знаком с моделью MVC, поэтому не совсем понял, в какую папку я должен поместить какую часть приложения. Прямо сейчас у меня есть

-Controllers:

- HomeController

-модели

- HomeRepository

- IHomeRepository

- Database.dbml (сейчас я использую только таблицу с именем product, и информация, которая мне нужна,

product_description и product_price)

Вид

- Главная

---- Индекс

---- ... и т.д ...

Мне удалось собрать все товары из таблицы товаров в маркированный список и показать их на странице индекса. Итак, мой HomeRepository создает текстовый текст данных из Database.dbml. Существует также общедоступный метод IList ListAll () (?), Где написано поисковое предложение. IHomeRepository имеет только

public interface IHomeRepository
{
  IList<product> ListAll();
}

Каким-то образом это работает, и какое-то время я был очень счастлив. Я попытался заполнить выпадающий список на странице индекса следующим образом:

    <% foreach (product m in (IENumerable)ViewData.Model
{
   Html.DropDownList("processor"m new[] {
   new SelectedListItem { Text = m.product_description, Value m.product_description }, "Select a processor")
   }
}

Но в нем отображается только столько выпадающего списка, сколько я получил продуктов из предложения поиска, и в каждом списке отображается только один результат.

Что мне делать? Или как мне создать такое приложение? Возможно, Web Forms должно быть проще в создании этого простого приложения, но мне нужно попытаться использовать методы eXtreme Programming, включая разработку через тестирование, и я понял, что это невозможно с Web Forms. Ну, этот XP - другая история ...

Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 24 февраля 2010

Предположим, ваше действие выглядит следующим образом:

public ActionResult Index()
{
    IEnumerable<Product> products = Repository.ListAll();
    return View(products);
}

И соответствующий вид строго типизирован до IEnumerable<Product>:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<YourNamespace.Product>>" %>

вам не нужно использовать оператор foreach для создания выпадающего списка:

<%= Html.DropDownList("processor", Model.Select(p => new SelectListItem { 
    Text = p.product_description, 
    Value = p.product_id 
})) %>
0 голосов
/ 26 февраля 2010

Спасибо за ответ, Дарин. Я попробовал, но это не сработало. Но при попытке я нашел другой пример, который работал. Теперь мой индекс выглядит так:

   [...] 
   <% using (Html.BeginForm()) { %>
       <table>
          <tr>
             <td>Processor</td>
             <td><%= Html.DropDownList("lstProcessor1", new SelectList((IEnumerable)ViewData["Processor1List"], "product_price", "product_description")) %></td>
          </tr>
          <tr>
             <td>Total Amount</td>
             <td>0,00 €</td>
          </tr>
         </table>
      <input type="submit" value="Submit" />
   <% } %>
    [...]

И начало HomeController:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using MvcApplication1.Models;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        // Connect database
        DB50DataContext _ctx = new DB50DataContext();

        // GET: /Home/
        public ActionResult Index()
        {
            // Search: Processors
            var products = from prod in _ctx.products
                           where prod.product_searchcode == "processor1"
                           select prod;

            ViewData["Processort1List"] = products;

            return View();
        }

Так что я сейчас не использую репозитории, и с таким решением я понимаю, что могу писать запросы в общедоступном ActionResult Index () для получения других компонентов, но я думаю, что это не так, как должно быть? Разве эти запросы к базе данных не должны быть где-то еще? Приложение будет иметь только домашнюю папку, все страницы внутри нее.

У меня также есть другая проблема с выпадающими списками: возможно ли отобразить product_description AND product_price в свойстве Text? Я пробовал "product_description + product_price", но, конечно, это не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...