MVC 2: Как создать ссылки из выпадающего списка, доступные, когда источником данных списка является база данных - PullRequest
0 голосов
/ 10 февраля 2011

Итак, у меня есть несколько списков, таких как этот:

<%: Html.DropDownList("CPUList", new  SelectList((IEnumerable)ViewData["CPUList"], "Price", "Name"))%>

Источником данных является модель LinQ to SQL * .dbml

Контроллер назначает данные ViewData как таковые, фильтруя результатыдля строкового значения "platform":

     if (platform == "i7)
                {

                    var processor = from prod in _ctx.Products
                                   where prod.Attributes == 1366"
                                   select prod;

                    var ram = from prod in _ctx.Products
                                   where prod.Attributes == "TripleChannel"
                                   select prod;

                    ViewData["CPUList"] = processor;
                    ViewData["RAMList"] = ram;
}

В основном я пытаюсь настроить страницу ПК, и в идеале я хотел бы, чтобы люди могли щелкнуть выбранную опцию, например ссылку, чтобы открыть новое небольшое окно сподробное описание выбранного компонента.У меня уже есть представление, которое принимает productID в качестве параметра и в основном отображает длинное описание (prod.LongDesc) для любого конкретного продукта.За исключением того, что я не знаю, как мне создать выпадающий список ссылок для каждой доступной опции / имени и создать правильный URL, который откроется в новом окне.По сути, это моя первая неделя программирования, поэтому, если вы считаете, что я иду совершенно неверно в отношении реализации этой функции, дайте мне знать, что, кажется, до сих пор прекрасно работает, хотя и заполняет список по мере необходимости в соответствии с параметрами.

1 Ответ

0 голосов
/ 10 февраля 2011

В вашем DropDownList я бы предпочел использовать идентификатор продукта в качестве значения, чтобы вы могли просто выполнить ajax-запрос к этому идентификатору продукта, чтобы получить больше информации о нем.

Таким образом, вы могли бы получитьДействие, которое выглядит примерно так:

    public ActionResult GetRam(Guid productId)
    {
        var cpu = Products.First(x => x.Id == productId);

        switch (cpu.Attribute)
        {
            case "1366":
                ViewData["Ram"] = Products.Where(x => x.Attribute == "TrippleChannel").ToArray();
                break;
            case "1155":
                ViewData["Ram"] = Products.Where(x => x.Attribute == "DualChannel").ToArray();
                break;
        }

        return PartialView("_RamList");
    }

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

Если в раскрывающемся списке указан идентификатор продукта, вы можете просто сделать что-то подобное, используя jQuery:

<script>
    $(document).ready(function () {
        $("#CPUList").change(function () {
            $.ajax({
                url: '/Product/GetRam/' + $(this).val(),
                dataType: 'html',
                success: function (data) {
                    $('#RAMListPlaceHolder').html(data);
            });
        });

    });
</script>

ГдеRAMListPlaceHolder - это div, где вы поместите HTML-код из частичного представления _RamList

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