2017-10-25 17 views
2

上記のコンボボックスの選択に基づいてコンボボックスをリフレッシュしようとしています。最初ASP.NET MVCカスケードコンボボックス

public JsonResult Testeeee(int id_cat) 
{ 
    var result = new dificuldade(); 

    SqlCommand com; 

    string str; 
    SqlConnection conn = new SqlConnection(@"Server=DESKTOP-4GPISBO\SQLEXPRESS;Database=Jogo;Trusted_Connection=True;"); 
    conn.Open(); 

    str = "select tipo_dificuldade, dificuldade.id_dificuldade " + 
      "from dificuldade " + 
      "INNER JOIN palavra ON palavra.id_dificuldade = dificuldade.id_dificuldade " + 
      "where palavra.id_cat = '" + id_cat + "' "; 

    com = new SqlCommand(str, conn); 
    SqlDataReader reader = com.ExecuteReader(); 
    if (reader.Read()) 
    { 
     result.TIPO_DIFICULDADE = reader["tipo_dificuldade"].ToString(); 
     result.id_dificuldade = int.Parse(reader["id_dificuldade"].ToString()); 

    } 
    conn.Close(); 

    return Json(result, JsonRequestBehavior.AllowGet); 
} 

の選択に基づいて、第2のコンボボックスを埋めるために

コントローラメソッドのコードこれが私の見解コードされています:

@Html.DropDownListFor(model => model.id_cat, ViewBag.ListaCategoria as SelectList, "-- Selecione a Categoria --", new { @class = "form-control" }) 
@Html.DropDownListFor(model => model.id_dificuldade, new SelectList(" "), "-- Selecione a Dificuldade --", new { @class = "form-control" }) 
私は、コントローラのための次のコードを持っています

jQueryコード:

$(document).ready(function() { 
    $("#id_cat").change(function() { 
     $.get("/Home/Testeeee", { id_cat: $("#id_cat").val() }, function (data) { 
      $("#id_dificuldade").empty(); 
      $.each(data, function (index, row) { 
       $("#id_dificuldade").append("<option value='" + row.id_dificuldade + "'>" + row.TIPO_DIFICULDADE + "</option>") 
      }); 
     }); 
    }) 
}); 

私の問題

は私の問題は、値が返却されなかったか、認識されないかのように値が、第二のコンボボックスでundefinedを返すことです。

+0

あなたのコントローラメソッドはコレクションではなく、一つの 'dificuldade'を返します(そして、あなたは単一のオブジェクトを反復できません) –

+0

リストとして返すにはどうすればいいですか? –

+0

'リスト'を初期化し、そのコレクションに 'dificuldade'の新しいインスタンスを追加するために' while(reader.Read()) 'を使い、コレクションを返します。 –

答えて

0

あなたのTesteeee()メソッドは、コレクションではなくdificuldadeの単一のインスタンスを返しています。注意点として

public JsonResult Testeeee(int id_cat) 
{ 
    List<dificuldade> model = new List<dificuldade>(); 
    .... 
    SqlDataReader reader = com.ExecuteReader(); 
    while (reader.Read()) 
    { 
     dificuldade item = new dificuldade(); 
     item.TIPO_DIFICULDADE = reader["tipo_dificuldade"].ToString(); 
     item.id_dificuldade = int.Parse(reader["id_dificuldade"].ToString()); 
     model.Add(item); 
    } 
    conn.Close(); 
    return Json(model, JsonRequestBehavior.AllowGet); 
} 

をコレクションを作成し、データを読み込むとき

それぞれを追加する方法を変更して、あなたはPOSTメソッドでビューを返すために必要がある場合は、データを失うことなど、他の問題を持っている、とあなた既存のレコードを編集する場合、コードは正しいデータを表示しません。参照してください How to keep cascade dropdownlist selected items after form submit?

+0

それは働く!それほど大変ありがとうございました、なぜ私はそれがなぜうまくいかなかったのか理解しています!! –

+0

私たちに叫ばないでください:) –

+0

ハハハ:P 良い一日を過ごしてください:P –