2012-04-04 3 views
4

Я создал два раскрывающегося списка, что я пытаюсь сделать, это сделать их каскадом. Такое, что второе зависит от первого. Причина в том, что моя база данных выложена как этотCascading Выпадающие списки MVC 3 C#

****Car_iD  Car_Name   Car_drive** 
     1   Honda    2 wheel drive 
     2   Acura    4wheel drive   
     3   Toyota   2 wheel drive 
     4   Honda    4wheelDrive  

Как вы можете видеть, у меня есть два Car_Names, которые являются одинаковыми, но Car_drive отличается. Поэтому, когда пользователь нажимает на первый раскрывающийся список, они будут видеть Honda, Acura, Toyota ... но если они выберут Honda, вторая выпадающая шкатулка скажет 2wheeldrive и 4wheeldrive.

Мой контроллер выглядит любит это:

public ActionResult Home() 
    { 
    ViewData["Car_Name"] = new SelectList(_context.Cars.Select(a => a.Car_Name).Distinct()); 
    ViewData["Car_drive"] = new SelectList(_context.Cars.Select(a => a.Car_drive).Distinct()); 
    } 

Мой Посмотреть выглядит эта

 Choose an Car 
       <label for= "Car_Names"></label> 
       <%= Html.DropDownList("Car_Name")%> 

       <label for= "Application_Names"></label> 
       <%= Html.DropDownList("Car_drive")%>  
       <input type = "submit" value ="Update" /> 
       <% using(Html.BeginForm("Home", "Home")) { %> 
       <%}%>  

Я прочитал так много учебник, но на самом деле ничего не приходит близко. Я стал ближе к MVC Awesome, но я продолжал получать ошибки, говоря, что в SelectableItem отсутствуют ссылки. Любая помощь по ее реализации будет отличной.

обновление Я добавил это в мой контроллер

public ActionResult CarNameChange(string Car_Name) 
    { 
     var car_drive = from env in _context.Cars 
           where env.Car_Name == Car_Name 
           select car_drive; 
     return Json(ViewData["Car_Drive"] = car_drive); 
    } 

Теперь нужна помощь в написании сценария, чтобы получить эту информацию от контроллера.

<script type = "text/javascript"> 
    $('#Car_Names').change(function(){ 
     var selectedName = $(this).val(); 
     $getJson('@Url.Action(" 

ответ

3

Проверьте: http://blogs.msdn.com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net-mvc.aspx и http://msprogrammer.serviciipeweb.ro/2011/02/13/asp-net-mvc-jquery-and-razor-cascading-dropdown-retrieving-partial-views-json-send-objects-handling-errors/, и вам ничего не понадобится. Оба проекта имеют демоверсию для загрузки кода.

С уважением

EDIT: После обновления вашего

Не используйте ViewData или ViewBag. Создайте объект ViewModel, содержащий свойства для Cars и CarDrive, он чище и проще добавить что-то новое.

+0

Спасибо за вилку. Хорошо также просмотреть мой http://www.asp.net/mvc/tutorials/javascript/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc - - на ViewModel v.ViewBag - ViewBag отлично и легко обновляется. В конце концов, это не модель, это метаданные о модели на самом деле – RickAndMSFT

2

Используя некоторые на стороне клиента JQuery сценариев, есть свой Car_Name выпадающий выпалить это событие всякий раз, когда кто-то изменяет выбор.

//Use your DOM identifier here. I don't know what it's called. 
$('#car_name').change(function() { 
    //Magic here. 
}); 

Теперь то, что вы хотите сделать это, когда это событие срабатывает, выпалить запрос AJAX со значением Car_Name.

Восстановите свой ActionMethod JsonResult.

Затем вы извлекаете эту информацию на стороне клиента и анализируете данные для вставки опций выбора в выпадающее меню Car_Drive.

Это то, что вам нужно сделать, разбитое на мелкие кусочки, которые просто следовать.

+0

Как упоминается множителем, у моего блога есть полный образец, который вы можете скачать: http://blogs.msdn.com/b/rickandy/archive/2012/01/09/cascasding-dropdownlist-in-asp-net- mvc.aspx – RickAndMSFT

Смежные вопросы