2016-07-15 104 views
0

我有兩個表一個製造商表和ManufacturerModel表。我正在嘗試填充兩個下拉列表。製造商名單,然後根據選擇哪個製造商,它會列出模型列表。但是我實現的不起作用。它什麼都不做。MVC級聯式下拉

我創建結合了兩種模式

public class ManufacturerModelDD 
{ 
    public DbSet<Manufacturer> Manufacturers { get; set; } 
    public DbSet<ManufacturerModel> ManufacturerModels { get; set; } 
} 

一個新視圖模型,我已經在我希望他們在控制器中創建2種功能。

ManufacturerModelDD mm = new ManufacturerModelDD(); 

    public JsonResult GetManufacturers() 
    { 
     return Json(mm.Manufacturers.ToList(), JsonRequestBehavior.AllowGet); 
    } 

    public JsonResult GetModelsByManufacturerID(string manufacuterId) 
    { 
     int Id = Convert.ToInt32(manufacuterId); 

     var models = from a in mm.ManufacturerModels where a.ManufacturerID == Id select a; 

     return Json(models); 
    } 

在我看來,我有

<script> 
$(function(){ 
$.ajax({ 
    type: "GET", 
    url: "/Device/GetManufacturers", 
    datatype: "Json", 
    success: function (data) { 
     $.each(data, function (index, value) { 
      $('#dropdownManufacturer').append('<option value="' + value.ManufacturerID + '">' + 
      value.Manufacturer1 +'</option>'); 
     }); 
    } 
}); 

    $('#dropdownManufacturer').change(function(){ 
     $('#dropdownModel').empty(); 

     $.ajax({ 
      type: "POST", 
      url: "/Device/GetModelsByManufacturerID", 
      datatype: "Json", 
      data: { manufacturerID: $('#dropdownManufacturer').val() }, 
      success: function (data) { 
       $.each(data, function (index, value) { 
        $('#dropdownModel').append('<option value="' + value.ManufacturerID + '">' + 
         value.Model + '</option>'); 
       }); 
      } 
     }); 
    }); 
    }); 

+0

哪一部分是不工作的看法特定的JavaScript代碼? – Shyju

+0

我不確定。我的下拉菜單是空白的。我不確定它是我的函數還是ajax。 –

回答

0

ManufacturerModelDD是不從DbContext繼承的類。所以我不確定 該類的一個對象可以用來訪問實體。

您可以考慮創建一個db上下文類的對象並訪問您的實體數據。
假設你的數據庫上下文類看起來像這樣

public class YourDbContext : DbContext 
{ 
    public DbSet<Manufacturer> Manufacturers { get; set; } 
    public DbSet<ManufacturerModel> ManufacturerModels { get; set; } 
} 

你可以使用這個類的一個對象。

public JsonResult GetManufacturers() 
{ 
    var db = new YourDbContext(); 
    var data = db.Manufacturers 
       .Select(s=> new {Id =s.ManufacturerID , 
               Name = s.ManufacturerName}).ToList(); 
    return Json(data , JsonRequestBehavior.AllowGet); 
} 

並確保在循環數據時使用正確的屬性。

success: function (data) { 
    $.each(data, function (index, value) { 
     $('#dropdownManufacturer').append('<option value="' + value.Id+ '">' + 
     value.Name+'</option>'); 
    }); 
} 

此外,請確保您有下scrips部分

@section Scripts 
{ 
    <script> 
    $(function(){ 
     //your code goes here. 
    }); 
    </script> 
} 
+0

我確信我的代碼看起來和上面完全一樣,而且什麼也沒有。它可以與我的下拉列表 - @ Html.DropDownList(「dropdownManufacturer」,新的SelectList(string.Empty,「價值」,「文本」),「請選擇一個製造商」,新{@style =「width:250;」 }) –

+0

剛剛嘗試相同的代碼,它的工作。你確定'db.Manufacturers'返回一些東西嗎?打開瀏覽器控制檯並查找js錯誤 – Shyju

+0

這與您使用的jQuery版本和/或您將它們放入什麼順序有關嗎? –