2015-04-29 4 views
1

Я упомянул This ans stackoverflow. Он работает нормально, но так как я взял раскрывающийся список в формах, поэтому, когда второй раскрывающийся список заполняет выбранное значение в первом раскрывающемся списке, получается. Как поддерживать эту ценность?Как заполнить выпадающий список на основе другого выпадающего списка выбранного значения в MVC 4?

Вот мой код.

Посмотреть

@{ Html.BeginForm("Create", "User", FormMethod.Post, new { enctype = "multipart/form-data" }); } 
@Html.DropDownList("country", ViewData["Id"] as List<SelectListItem>, new { onchange = "this.form.submit();" }) 
@{ Html.EndForm(); } 


@{ Html.BeginForm("Create", "User", FormMethod.Post, new { enctype = "multipart/form-data" }); } 
@Html.DropDownList("state", ViewData["Id1"] as List<SelectListItem>, new { onchange = "this.form.submit();" }) 
@{ Html.EndForm(); } 


@{ Html.BeginForm("Create", "User", FormMethod.Post, new { enctype = "multipart/form-data" }); } 
@Html.DropDownList("city", ViewData["Id2"] as List<SelectListItem>, new { onchange = "this.form.submit();" }) 
@{ Html.EndForm(); } 

Контроллер

public ActionResult Create() 
    { 
     FillCountry(); 
     FillState(); 
     FillCity(); 
     return View(); 
    } 
    [HttpPost] 
    public ActionResult Create(User ur) 
    { 
     string str = @"Data Source=DEV_3\SQLEXPRESS;Initial Catalog=DB_Naved_Test;Integrated Security=True"; 
     SqlConnection con = new SqlConnection(str); 
     string query = "Insert into tblTest (Name,Email,MobileNo) values('" + ur.Name + "','" + ur.Email + "','" + ur.MobileNo + "')"; 
     con.Open(); 
     SqlCommand cmd = new SqlCommand(query, con); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
     TempData["msg"] = "<script>alert('Inserted Successfully');</script>"; 
     ModelState.Clear(); 
     FillCountry(); 
     FillState(); 
     FillCity(); 
     return View(); 


    } 
    public void FillCountry() 
    { 
     string str = @"Data Source=DEV_3\SQLEXPRESS;Initial Catalog=DB_Naved_Test;Integrated Security=True"; 
     SqlConnection con = new SqlConnection(str); 
     string query = "select * from tblCountry "; 
     SqlCommand cmd = new SqlCommand(query, con); 
     con.Open(); 
     SqlDataReader rdr = cmd.ExecuteReader(); 
     List<SelectListItem> li = new List<SelectListItem>(); 
     li.Add(new SelectListItem { Text = "Select", Value = "0" }); 
     while (rdr.Read()) 
     { 
      li.Add(new SelectListItem { Text = rdr[1].ToString(), Value = rdr[0].ToString() }); 
     } 

     ViewData["Id"] = li; 

    } 
    public void FillState() 
    { 
     int id = Convert.ToInt16(Request["country"]); 
     string str = @"Data Source=DEV_3\SQLEXPRESS;Initial Catalog=DB_Naved_Test;Integrated Security=True"; 
     SqlConnection con = new SqlConnection(str); 
     string query = "select * from tblState where cid='" + id + "'"; 
     SqlCommand cmd = new SqlCommand(query, con); 
     con.Open(); 
     SqlDataReader rdr = cmd.ExecuteReader(); 
     List<SelectListItem> li = new List<SelectListItem>(); 
     li.Add(new SelectListItem { Text = "Select", Value = "0" }); 
     while (rdr.Read()) 
     { 
      li.Add(new SelectListItem { Text = rdr[1].ToString(), Value = rdr[0].ToString() }); 
     } 
     ViewData["Id1"] = li; 
    } 
    public void FillCity() 
    { 
     int id = Convert.ToInt16(Request["state"]); 
     string str = @"Data Source=DEV_3\SQLEXPRESS;Initial Catalog=DB_Naved_Test;Integrated Security=True"; 
     SqlConnection con = new SqlConnection(str); 
     string query = "select * from tbl_cities where StateId='" + id + "'"; 
     SqlCommand cmd = new SqlCommand(query, con); 
     con.Open(); 
     SqlDataReader rdr = cmd.ExecuteReader(); 
     List<SelectListItem> li = new List<SelectListItem>(); 
     li.Add(new SelectListItem { Text = "Select", Value = "0" }); 
     while (rdr.Read()) 
     { 
      li.Add(new SelectListItem { Text = rdr[1].ToString(), Value = rdr[0].ToString() }); 
     } 
     ViewData["Id2"] = li; 
    } 

, а также, когда я использую только два DROPDOWNLIST т.е. ddlCountry и ddlState и выберите страну, из ddlCountry моего ddlSates является адресность заселена правильно, но выбранная страна из ddlCountry меняется

+0

Не относится к вопросу, но попытаться avoi d с использованием конкатенации строк вместо этого используйте параметризованный запрос, чтобы избежать опасности SQL Injection. –

+0

@ downvoter какой-либо причине для голосования? – Navy

+0

@downvoter Да, это может быть плохой вопрос, но как вы объясните OP почему? –

ответ

1

Сделал это и работает отлично

Контроллер

public ActionResult Index() 
    { 
     string str = @"Data Source=DEV_3\SQLEXPRESS;Initial Catalog=DB_Naved_Test;Integrated Security=True"; 
     SqlConnection con = new SqlConnection(str); 
     string query = "select * from tbl_country "; 
     SqlCommand cmd = new SqlCommand(query, con); 
     con.Open(); 
     SqlDataReader rdr = cmd.ExecuteReader(); 
     List<SelectListItem> li = new List<SelectListItem>(); 
     while (rdr.Read()) 
     { 
      li.Add(new SelectListItem { Text = rdr[1].ToString(), Value = rdr[0].ToString() }); 
     } 
     ViewData["country"] = li; 
     return View(); 
    } 
    public JsonResult StateList(int Id) 
    { 
     string str = @"Data Source=DEV_3\SQLEXPRESS;Initial Catalog=DB_Naved_Test;Integrated Security=True"; 
     SqlConnection con = new SqlConnection(str); 
     string query = "select * from tbl_states where cid='" + Id + "'"; 
     SqlCommand cmd = new SqlCommand(query, con); 
     con.Open(); 
     SqlDataReader rdr = cmd.ExecuteReader(); 
     List<SelectListItem> li = new List<SelectListItem>(); 
     while (rdr.Read()) 
     { 
      li.Add(new SelectListItem { Text = rdr[1].ToString(), Value = rdr[0].ToString() }); 
     } 
     return Json(li, JsonRequestBehavior.AllowGet); 
    } 
    public JsonResult Citylist(int id) 
    { 
     string str = @"Data Source=DEV_3\SQLEXPRESS;Initial Catalog=DB_Naved_Test;Integrated Security=True"; 
     SqlConnection con = new SqlConnection(str); 
     string query = "select * from tbl_cities where stateid='" + id + "'"; 
     SqlCommand cmd = new SqlCommand(query, con); 
     con.Open(); 
     SqlDataReader rdr = cmd.ExecuteReader(); 
     List<SelectListItem> li = new List<SelectListItem>(); 
     while (rdr.Read()) 
     { 
      li.Add(new SelectListItem { Text = rdr[1].ToString(), Value = rdr[0].ToString() }); 
     } 
     return Json(li, JsonRequestBehavior.AllowGet); 
    } 

Посмотреть

@using (Html.BeginForm()) 
{ @Html.DropDownList("Country", ViewData["country"] as SelectList, "Select Country", new { id = "Country", style = "width: 150px;" })<br /> 
<select id="State" name="state" , style="width: 150px;"></select><br /> 
<select id="city" name="City" , style="width: 150px;"></select><br /> 
} 
@Scripts.Render("~/bundles/jquery") 
<script type="text/jscript"> 
$(function() 
{ 
    $('#Country').change(function() 
    {   
     $.getJSON('/Cascading/StateList/' + $('#Country').val(), function (data) 
     { 
      var items = '<option>Select State</option>'; 
      $.each(data, function (i, state) 
      { 
       items += "<option value='" + state.Value + "'>" + state.Text + "</option>"; 
      }); 
      $('#State').html(items); 
     }); 
    }); 

    $('#State').change(function() 
    { 
     $.getJSON('/Cascading/Citylist/' + $('#State').val(), function (data) 
     { 
      var items = '<option>Select City</option>'; 
      $.each(data, function (i, city) 
      { 
       items += "<option value='" + city.Value + "'>" + city.Text + "</option>"; 
      }); 
      $('#city').html(items); 
     }); 
    }); 
}); 

+0

, как вы получаете ценность города и государства в действии без использования json – KumarHarsh

0

вы можете использовать JQuery, как показано ниже

$("#select1").change(function() { 
if ($(this).data('options') === undefined) { 
/*Taking an array of all options-2 and kind of embedding it on the select1*/ 
$(this).data('options', $('#select2 option').clone()); 
} 
var id = $(this).val(); 
var options = $(this).data('options').filter('[value=' + id + ']'); 
$('#select2').html(options); 
}); 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
<select name="select1" id="select1"> 
<option value="1">Fruit</option> 
<option value="2">Animal</option> 
<option value="3">Bird</option> 
<option value="4">Car</option> 
</select> 


<select name="select2" id="select2"> 
<option value="1">Banana</option> 
<option value="1">Apple</option> 
<option value="1">Orange</option> 
<option value="2">Wolf</option> 
<option value="2">Fox</option> 
<option value="2">Bear</option> 
<option value="3">Eagle</option> 
<option value="3">Hawk</option> 
<option value="4">BWM<option> 
</select> 
Смежные вопросы