Создайте 2 раскрывающихся списка и таблицу на основе значения раскрывающегося списка. - PullRequest
0 голосов
/ 02 мая 2011

У меня есть проект MVC3 (с использованием C #), и я использую Razor и EntityFramework 4.1, и я хотел бы выполнить следующее:

  1. Создайте выпадающий список, который отображает провинции. После выбора провинции автоматически заполняется второй выпадающий список, в котором отображаются города этой провинции.
  2. Второе раскрывающееся меню, в котором отображаются города (заполненные первым раскрывающимся списком), когда пользователь выбирает город, оно автоматически заполняет таблицу с пригородами под городом.
  3. Таблица, содержащая список пригородов (на основе второго раскрывающегося списка).

Заранее спасибо!

Я создал свои модели,

public class Provinces
{
[Key]
public int ProvinceID {get; set;}
public string Province {get; set;}
public virtual ICollection<City> City {get;set;}
}

public class City
{
[Key]
public int CityID {get; set;}
public string City {get; set;}
public virtual ICollection<Suburb> Suburb {get; set;}
public virtual Province Province {get; set;}
}

public class Suburb
{
[Key]
public int SuburbID {get; set;}
public string Suburb {get; set;}
public virtual City City {get; set;}
}

Модель представления для обработки выпадающего списка

public class MyViewModel
{
public string SelectedProvinceID {get; set;}
public string SelectedCityID {get; set;}
public IEnumerable<Province> Province {get; set;}
}

Контроллер

public class Suburbs : Controller
{
MyEntities suburbsDB = new MyEntities();

public ActionResult Create()
{ 
//For Province dropdown
ViewBag.Province = suburbsDB.Province.OrderBy(prov => prov.Province).ToList();

var suburbDetails =  new Suburb();
return View(suburbDetails);
}

Я довольно новичок в EntityFramework, Json и Razor, и у меня возникла проблема с тем, как мне создать представление. Я ссылался на ответ в Каскадные выпадающие списки в MVC3 Razor view Каскадные раскрывающиеся списки в MVC 3 Razor view

Как мне обновить таблицу на основе значения раскрывающегося списка Пригород?

Ответы [ 2 ]

0 голосов
/ 04 мая 2011

По вашему мнению, вы бы определили два раскрывающихся списка, например:

@Html.DropDownListFor(model => model.Provinces.ProvinceID, Model.Province, new { id = "ddlProvinces", onChange = "$:populateCitiesDropdown()" })

@Html.DropDownListFor(model => model.City.CityID, Model.City, new { id = "ddlCities" })

В Javascript ваш метод заполнения будет выглядеть следующим образом:

function populateIssuesDropdown() {
    $("#ddlCities").empty();
    var typeID = getProvinceID();
    $.getJSON('@Url.Action("GetCitiesByProvince", "some_controller")?TypeID=' + typeID, function (result) {
        $.each(result, function () {
            $("<option>").attr("value", this.CityID).text(this.City).appendTo("#ddlCities");
        });
    });
}

function getProvinceID() {
    var provinceID = $("#ddlProvinces").val();
    return provinceID;
}

В вашемКонтроллер:

public JsonResult GetCitiesByProvince(int ProvinceID)
{
    var result = _someRepository.GetCities(ProvinceID).Select(
            c => new { CityID = c.CityID, City = c.City }); 
    JsonResult jsonResult = new JsonResult { Data = result, JsonRequestBehavior = JsonRequestBehavior.AllowGet };

    return jsonResult;
}
0 голосов
/ 02 мая 2011

Сейчас он немного староват, но зацените эту статью Стивена Уолтера, которая делает именно это:

http://stephenwalther.com/blog/archive/2008/09/07/asp-net-mvc-tip-41-creating-cascading-dropdown-lists-with-ajax.aspx

Он создает два раскрывающихся списка и использует jQuery / Ajax для извлечения списка взаполните второе, когда значение выбрано в первом (вы можете легко расширить это, чтобы получить третий выпадающий список):

Нажмите на статью, чтобы получить полный код, но вот фрагмент, показывающий некоторые иззначительный JavaScript (я добавил несколько комментариев):

function pageLoad() {
    ddlMakes = $get("Makes");
    ddlModels = $get("Models");
    // Bind the "bindOptions" function to the change event of the ddlMakes dropdown
    $addHandler(ddlMakes, "change", bindOptions);
    // Call the function immediately, so the next dropdown will be populated if there is already something selected in the first
    bindOptions();
}

function bindOptions() {
    // Clear out existing options in the second dropdown
    ddlModels.options.length = 0;
    // If something is selected in the first dropdown
    var makeId = ddlMakes.value;
    if (makeId) {
        // Send an ajax request to the corresponding url
        var url = "/Action/Models/" + makeId;
        getContent(url, bindOptionResults);
    }
}

function bindOptionResults(data) {
    var newOption;
    // Loop through the options in the response
    for (var k = 0; k < data.length; k++) {
        // Add a new option to the second dropdown for this item
        newOption = new Option(data[k].Name, data[k].Id);
        ddlModels.options.add(newOption);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...