Member 12753551 Ответов: 1

Retrive значения таблицы базы данных в выпадающем списке с помощью MVC 4


мой код просмотра
==============
@{
    Layout = null;
}

<h2>Dealer</h2>

<script src="~/Scripts/modernizr-2.5.3.js"></script>
<script src="~/Scripts/jquery-2.1.1.min.js"></script>

            VARIANTNAME    @Html.DropDownList("var1", "Choose VARIANTNAME")
            VEHICLENAME    @Html.DropDownList("var2", "Choose VEHICLENAME")
            MODELNAME    @Html.DropDownList("var3", "Choose MODELNAME")
            <script type="text/javascript">

                $(function () {
                    $("#var1").change(function () {
                        var name = $("#var1 :selected").text();  //if user select the tournament
                        var url = 'Home/Team';
                        var data1 = { "name": name };
                        $.post(url, data1, function (data) {    //ajax call
                            var items = [];
                            items.push("<option value=" + 0 + ">" + "Choose VEHICLENAME" + "</option>"); //first item
                            for (var i = 0; i < data.length; i++) {
                                items.push("<option value=" + data[i].Value + ">" + data[i].Text + "</option>");
                            }                                         //all data from the team table push into array
                            $("#var2").html(items.join(' '));
                        })                                            //array object bind to dropdown list
                    });

                    $("#var2").change(function () {                  //same logic for 3rd dropdown list
                        var name = $("#var2 :selected").text();

                        var url = 'Home/Player';
                        var data1 = { "name": name };
                        $.post(url, data1, function (data) {
                            var items = [];
                            items.push("<option value=" + 0 + ">" + "Choose Player" + "</option>");
                            for (var i = 0; i < data.length; i++) {
                                items.push("<option value=" + data[i].Value + ">" + data[i].Text + "</option>");
                            }
                            $("#var3").html(items.join(' '));
                        })
                    });

                });

            </script>

            <input type="submit" value="submit" />


Код контроллера
======================
public class DealerController : Controller
    {
        //
        // GET: /Dealer/

        string connection = ConfigurationManager.ConnectionStrings["DBconnectionString"].ConnectionString;
        List<SelectListItem> Vehicle = new List<SelectListItem>();
        List<SelectListItem> MODELNAME = new List<SelectListItem>();
        List<SelectListItem> Variant = new List<SelectListItem>();
        public ActionResult Dealer()
        {
            ViewBag.var1 = GetOptions();
            ViewBag.var2 = Vehicle;
            ViewBag.var3 = MODELNAME;
            return View();
        }


        private SelectList GetOptions()
        {

            using (SqlConnection conn = new SqlConnection(connection))
            {
                try
                {
                    conn.Open();
                    SqlDataReader myReader = null;
                    SqlCommand myCommand = new SqlCommand("SELECT VARIANTID, VARIANTNAME FROM VARIANT", conn);

                    myReader = myCommand.ExecuteReader();
                    while (myReader.Read())
                    {

                        Variant.Add(new SelectListItem { Text = myReader["VARIANTNAME"].ToString(), Value = myReader["VARIANTID"].ToString() });
                    }


                }
                catch (Exception e)
                {
                    string msg = e.Message;
                }
                finally
                {

                    conn.Close();
                }

                return new SelectList(Variant, "Value", "Text", "id");

            }
        }
        public JsonResult Team(string name)
        {

            using (SqlConnection conn = new SqlConnection(connection))
            {
                conn.Open();
                SqlDataReader myReader = null;
                SqlCommand myCommand = new SqlCommand("select VARIANTID,VEHICLENAME from VARIANT where VARIANTNAME ='" + name + "' ", conn);
                myReader = myCommand.ExecuteReader();
                while (myReader.Read())
                {

                    Vehicle.Add(new SelectListItem { Text = myReader["VEHICLENAME"].ToString(), Value = myReader["VARIANTID"].ToString() });
                }
            }
            return Json(Vehicle, JsonRequestBehavior.AllowGet);

        }

        public JsonResult Player(string name)
        {

            using (SqlConnection conn = new SqlConnection(connection))
            {
                conn.Open();
                SqlDataReader myReader = null;
                SqlCommand myCommand = new SqlCommand("select VARIANTID,MODELNAME from VARIANT where VEHICLENAME ='" + name + "' ", conn);
                myReader = myCommand.ExecuteReader();
                while (myReader.Read())
                {

                    MODELNAME.Add(new SelectListItem { Text = myReader["MODELNAME"].ToString(), Value = myReader["VARIANTID"].ToString() });
                }
            }
            return Json(MODELNAME, JsonRequestBehavior.AllowGet);

        }


Что я уже пробовал:

первое значение только работает и еще два скрипта или не работают.., пожалуйста, помогите кому-нибудь

Karthik_Mahalingam

получаете какую-либо ошибку в окне консоли?

Member 12753551

Никакой ошибки мы не получаем, но и не работаем

Karthik_Mahalingam

поместите отладчик и точку останова в код и проверьте, попадает ли он в метод

1 Ответов

Рейтинг:
0

David_Wimbley

Итак, несколько вещей.

Вы используете событие onchange для своих выпадающих списков $("#var1").change(функция, но сами ваши выпадающие списки не содержат в себе никаких данных:

VARIANTNAME    @Html.DropDownList("var1", "Choose VARIANTNAME")
            VEHICLENAME    @Html.DropDownList("var2", "Choose VEHICLENAME")
            MODELNAME    @Html.DropDownList("var3", "Choose MODELNAME")


Если бы вы собирались сделать что-то с эффектом onchange, я бы ожидал увидеть данные в этих выпадающих списках. Все, что вы сделали, это дали выпадающим спискам имя, например: var1, и установили метку опции по умолчанию, например: "выберите имя варианта", учитывая, что метка опции по умолчанию является единственной опцией...нет ничего, что можно было бы "изменить", поэтому ваши события .change в вашем jquery никогда не будут срабатывать, что ведет себя так, как ожидалось.

Выпадающий список, который будет предварительно заполнен данными, будет выглядеть примерно так

@Html.DropDownList("var1", Model.Var1Options, "Choose Vehiclename")


Или что-то в этом роде.

Я думаю, вам нужно переосмыслить, как вы загружаете данные/какое событие jquery использовать для извлечения ваших данных из БД.

Но давайте предположим, что эти события. change действительно работают...в чем я на 99% уверен, что это не так...ваша передача обратно "Choose VARIANTNAME" в качестве параметра имени...Я очень сомневаюсь, что у вас есть что-то в вашей базе данных, что вернулось бы из этого оператора select

select VARIANTID,VEHICLENAME from VARIANT where VARIANTNAME ='Choose VARIANTNAME'


Поскольку в то время, когда событие .change срабатывает на var1, единственным вариантом в этом выпадающем списке является "Choose VARIANTNAME", а строка jquery -> var name = $("#var1 :selected").text(); будет получать Choose VariantName (я считаю...если нет, то он получает пустую строку).

Но я скажу вот что...вам нужно настроиться на отладку. Если у вас есть события в jquery, привязанные к элементам, все, что вам нужно сделать, это добавить консоль.войдите в это event...do каким бы ни было это событие (например, нажмите) и посмотрите, есть ли ваша консоль.дровяной камин. Если бы вы сделали это, то, вероятно, увидели бы, что ваши обработчики событий изменений не стреляют с самого начала.