ایجاد DropDownList آبشاری با استفاده از Entity Framework ،ADO.NET

چهارشنبه 13 مرداد 1395

در این مقاله میخواهیم با استفاده از دو روش ADO.NET ، Entity FrameWork یک DropDownList آبشاری در mvc ایجاد کنیم و آن را به بانک اطلاعاتی متصل کنیم و برای ارسال Object ها از Json استفاده می کنیم.

ایجاد DropDownList آبشاری با استفاده از Entity Framework ،ADO.NET

در ابتدا سه جدول در بانک اطلاعاتی خود ایجاد میکنیم .

سه جدول ایجاد شده را مشاهده کنید.

در ایجاد جدول ها موارد زیر را باید انجام دهید:

1.ابتدا در جدول Country (فیلد id را کلید اصلی قرار میدهیم)

2.در جدول state (فیلد id  را کلید اصلی قرار می دهیم ، یک کلید فرعی از فیلد CountyCode به id  جدول Country متصل میکنیم)

3.درجدولCity (فیلد id را کلید اصلی قرار میدهیم، یک کلید فرعی از فیلد StateCode به id جدول State متصل میکنیم).

حال یک  connection string در Web.Config ایجاد میکنیم  تا برنامه به بانک اطلاعتی متصل شود.

1.	<connectionStrings>  
2.	   <add name="Connect" connectionString="Data Source=DEBENDRA;Initial Catalog=DropDownCasdDB;User ID=sa;Password=123"/>  
3.	 </connectionStrings>  

حال یک کلاس به نام  DAL.cs به پروژه اضافه میکنیم و Connection string خود را در آن فراخوانی میکنیم و جدول های مختلف را با استفاده از آن به پروژه متصل می کنیم.

1.	using System;    
2.	using System.Collections.Generic;    
3.	using System.Linq;    
4.	using System.Web;    
5.	using System.Data.SqlClient;    
6.	using System.Data;    
7.	using System.Configuration;    
8.	using System.Collections;    
9.	using System.Web.Mvc;    
10.	    
11.	namespace MVC2    
12.	{    
13.	    public  class DAL    
14.	    {    
15.	        DataSet ds;    
16.	        SqlDataAdapter da;    
17.	    
18.	       public static SqlConnection connect()    
19.	        {    
20.	           //Reading the connection string from web.config    
21.	            string Name = ConfigurationManager.ConnectionStrings["connect"].ConnectionString;    
22.	           //Passing the string in sqlconnection.    
23.	            SqlConnection con = new SqlConnection(Name);    
24.	           //Check wheather the connection is close or not if open close it else open it    
25.	           if(con.State==ConnectionState.Open)    
26.	           {    
27.	               con.Close();    
28.	    
29.	           }    
30.	           else    
31.	           {    
32.	             
33.	               con.Open();    
34.	           }    
35.	           return con;    
36.	    
37.	        }    
38.	        //Creating a method which accept any type of query from controller to execute and give result.    
39.	        //result kept in datatable and send back to the controller.    
40.	       public  DataTable MyMethod( string Query)    
41.	       {    
42.	          ds= new DataSet();    
43.	          DataTable dt = new DataTable();    
44.	          da = new SqlDataAdapter(Query, DAL.connect());    
45.	    
46.	          da.Fill(dt);    
47.	           List<SelectListItem> list = new List<SelectListItem>();    
48.	           return dt;    
49.	          
50.	       }    
51.	    
52.	    }    
53.	}    

HomeController داده ها را از DAL.cs  دریافت می کند.

1.	public class HomeController : Controller  
2.	   {  
3.	       DAL objdal = new DAL();  
4.	        
5.	        
6.	  
7.	       public ActionResult Index()  
8.	       {  
9.	           string countrystring = "select * from tbl_Country";  
10.	           DataSet ds = new DataSet();  
11.	           List<string> li = new List<string>();  
12.	          DataTable dt=new DataTable();  
13.	           dt= objdal.MyMethod(countrystring);  
14.	           List<SelectListItem> list = new List<SelectListItem>();  
15.	          foreach (DataRow row in dt.Rows)  
16.	          {  
17.	               
18.	                  list.Add(new SelectListItem { Text =Convert.ToString(row.ItemArray[1]),Value=Convert.ToString(row.ItemArray[0])});  
19.	           
20.	          }  
21.	  
22.	  
23.	  
24.	          ViewBag.country = list;  
25.	  
26.	  
27.	           return View();  
28.	       }  

حال یک View   به نام Index  برای کنترلرHome   ایجاد می کنیم .

یک DropDownList  به View اضافه میکنیم .

1.	<div style=" background-color:blanchedalmond; border-color:black; border:solid">  

2.	    <br />  
3.	    <div>  
4.	        <b>Select your Country:</b>  
5.	    </div>  
6.	  
7.	  
8.	    <div>  
9.	        @Html.DropDownList("country", ViewBag.country as List<SelectListItem>, new { style = "width: 200px;" })  
10.	        
11.	    </div>   

پروژه را Save کرده و آن را اجرا می کنیم تصویر زیر را مشاهده کنید:

یک Action Method که یک پارامتر مانند Country Code که برای بازیابی State مربوط به country است اضافه میکنیم و یک متد برایJquery انتخاب و ارسال Country Id از Controller به صفحه اضافه میکنیم.

در زیر کد Jquery  Id را ارسال میکند وCountry Id   را از Action Method دریافت می کند. و داده ها را به DropDown list متصل می کند.

1.	<script src="~/Scripts/jquery-1.10.2.min.js"></script>  

2.	<script type="text/javascript">  
3.	  
4.	    $(document).ready(function () {  
5.	        
6.	        $("#country").change(function () {  
7.	            $("#State").empty();  
8.	            $.ajax({  
9.	                type: 'POST',  
10.	                url: '@Url.Action("getstate")',  
11.	  
12.	                dataType: 'json',  
13.	  
14.	                data: { id: $("#country").val() },  
15.	  
16.	  
17.	                success: function (states) {  
18.	  
19.	  
20.	                    $.each(states, function (i, state) {  
21.	                        $("#State").append('<option value="' + state.Value + '">' +  
22.	                             state.Text + '</option>');  
23.	  
24.	                    });  
25.	                },  
26.	                error: function (ex) {  
27.	                    alert('Failed to retrieve country states.' + ex);  
28.	                }  
29.	            });  
30.	            return false;  
31.	        })  
32.	    });  
33.	  
34.	</script>   

Getstate در Controller

1.	public JsonResult getstate(int id)  
2.	       {  
3.	           string countrystring = "select * from tbl_state where countrycode='"+id+"'";  
4.	             
5.	         
6.	           DataTable dt = new DataTable();  
7.	           dt = objdal.MyMethod(countrystring);  
8.	           List<SelectListItem> list = new List<SelectListItem>();  
9.	           list.Add(new SelectListItem { Text = "--Select Country--", Value = "0" });  
10.	           foreach (DataRow row in dt.Rows)  
11.	           {  
12.	  
13.	               list.Add(new SelectListItem { Text = Convert.ToString(row.ItemArray[1]), Value = Convert.ToString(row.ItemArray[0]) });  
14.	  
15.	           }  
16.	           return Json(new SelectList(list, "Value", "Text", JsonRequestBehavior.AllowGet));  
17.	  
18.	  
19.	       }  

View

<div style=" background-color:blanchedalmond; border-color:black; border:solid">  
•    
•    
•      <div>  	
•          <b>Select Country</b>  
•      </div>  
•      <div>  
•          @Html.DropDownList("country", ViewBag.country as List<SelectListItem>, new { style = "width: 200px;" })  
•    
•      </div>  
•      <br />  
•    
•      <div>  
•          <b>Select State</b>  
•      </div>  
•      <div>  
•          @Html.DropDownList("State", new SelectList(string.Empty, "Value", "Text"), "--Select State--", new { style = "width:200px" })  
•      </div>  
•     </div>  

با استفاده از Jquery،  StateId را به کنترلر ارسال می کنیم و شهرها را از Controller دریافت می کنیم و آن هارا به DropDownList متصل می کنیم  .

1.	<script type="text/javascript">  
2.	  
3.	    $(document).ready(function () {  
4.	          
5.	        $("#State").change(function () {  
6.	            $("#city").empty();  
7.	            $.ajax({  
8.	                type: 'POST',  
9.	                url: '@Url.Action("getCity")',  
10.	                dataType: 'json',  
11.	                data: { id: $("#State").val() },  
12.	                success: function (city) {  
13.	  
14.	                    $.each(city, function (i, city) {  
15.	                        $("#city").append('<option value="'  
16.	                                                   + city.Value + '">'  
17.	                                             + city.Text + '</option>');  
18.	                    });  
19.	                },  
20.	                error: function (ex) {  
21.	                    alert('Failed.' + ex);  
22.	                }  
23.	            });  
24.	            return false;  
25.	        })  
26.	    });  
27.	</script>  

Action method

1.	public JsonResult getCity(int id)  
2.	      {  
3.	          string countrystring = "select * from tbl_city where statecode='" + id + "'";  
4.	          DataSet ds = new DataSet();  
5.	          List<string> li = new List<string>();  
6.	          DataTable dt = new DataTable();  
7.	          dt = objdal.MyMethod(countrystring);  
8.	          List<SelectListItem> list = new List<SelectListItem>();  
9.	          foreach (DataRow row in dt.Rows)  
10.	          {  
11.	  
12.	              list.Add(new SelectListItem { Text = Convert.ToString(row.ItemArray[1]), Value = Convert.ToString(row.ItemArray[0]) });  
13.	  
14.	          }  
15.	          return Json(new SelectList(list, "Value", "Text", JsonRequestBehavior.AllowGet));  
16.	  
17.	  
18.	      }  

 حال View را کامل می کنیم.

@{  
•      ViewBag.Title = "Region Details";  
•  }  
•    
•  <h2>Details</h2>  
•    
•  <script src="~/Scripts/jquery-1.10.2.min.js"></script>  
•    
•    
•  <script type="text/javascript">  
•      $(document).ready(function () {  
•         
•          $("#country").change(function () {  
•              $("#State").empty();  
•              $.ajax({  
•                  type: 'POST',  
•                  url: '@Url.Action("getstate")',  
•    
•                  dataType: 'json',  
•    
•                  data: { id: $("#country").val() },  
•    
•    
•                  success: function (states) {  
•    
•    
•                      $.each(states, function (i, state) {  
•                          $("#State").append('<option value="' + state.Value + '">' +  
•                               state.Text + '</option>');  
•    
•                      });  
•                  },  
•                  error: function (ex) {  
•                      alert('Failed to retrieve states.' + ex);  
•                  }  
•              });  
•              return false;  
•          })  
•      });  
•  </script>  
•  <script type="text/javascript">  
•    
•      $(document).ready(function () {  
•            
•          $("#State").change(function () {  
•              $("#city").empty();  
•              $.ajax({  
•                  type: 'POST',  
•                  url: '@Url.Action("getCity")',  
•                  dataType: 'json',  
•                  data: { id: $("#State").val() },  
•                  success: function (city) {  
•    
•                      $.each(city, function (i, city) {  
•                          $("#city").append('<option value="'  
•                                                     + city.Value + '">'  
•                                               + city.Text + '</option>');  
•                      });  
•                  },  
•                  error: function (ex) {  
•                      alert('Failed.' + ex);  
•                  }  
•              });  
•              return false;  
•          })  
•      });  
•  </script>  
•    
•    
•  <div style=" background-color:blanchedalmond; border-color:black; border:solid">  
•      <br />  
•      <div>  
•          <b>Select your Country:</b>  
•      </div>  
•    
•    
•      <div>  
•          @Html.DropDownList("country", ViewBag.country as List<SelectListItem>, new { style = "width: 200px;" })  
•          
•      </div>  
•      <br />  
•      <div>  
•          <b>Select your State:</b>  
•      </div>  
•    
•      <div>  
•    
•      </div>  
•      <div>  
•    
•          @Html.DropDownList("State", new SelectList(string.Empty, "Value", "Text"), "--Select State--", new { style = "width:200px" })  
•    
•      </div>  
•      <br />  
•      <div>  
•         <b>Select your Region:</b>   
•      </div>  
•    
•      <div>  
•    
•          @Html.DropDownList("city", new SelectList(string.Empty, "Value", "Text"), "--Select City--", new { style = "width:200px" })  
•    
•      </div>  
•        
•    
•           

نکته: اگر از Entity FrameWork  استفاده می کنید کدهای زیر را جایگزین کدهای قبلی کنید.

Controller

1.	using System;  
2.	using System.Collections.Generic;  
3.	using System.Linq;  
4.	using System.Web;  
5.	using System.Web.Mvc;  
6.	  
7.	namespace MVC_Project.Controllers  
8.	{  
9.	    public class HomeController : Controller  
10.	    {  
11.	        CodeXEntities obj = new CodeXEntities();  
12.	        public ActionResult Index()  
13.	        {  
14.	            return View();  
15.	        }  
16.	  
17.	        public ActionResult About()  
18.	        {  
19.	            ViewBag.Message = "Your application description page.";  
20.	  
21.	            return View();  
22.	        }  
23.	  
24.	        public ActionResult Contact()  
25.	        {  
26.	            ViewBag.Message = "Your contact page.";  
27.	  
28.	            return View();  
29.	        }  
30.	        public ActionResult Details()  
31.	        {  
32.	              
33.	            var country = obj.tbl_Country.ToList();  
34.	            List<SelectListItem> li = new List<SelectListItem>();  
35.	            li.Add(new SelectListItem { Text = "--Select Country--", Value = "0" });  
36.	             
37.	            foreach(var m in country)  
38.	            {  
39.	  
40.	                  
41.	                li.Add(new SelectListItem { Text = m.Country, Value = m.slNO.ToString() });  
42.	                ViewBag.country = li;  
43.	                  
44.	            }  
45.	            return View();  
46.	        }  
47.	  
48.	        public JsonResult getstate(int id)  
49.	        {  
50.	            var states = obj.tbl_state.Where(x => x.countryCode == id).ToList();  
51.	            List<SelectListItem> listates = new List<SelectListItem>();  
52.	  
53.	            listates.Add(new SelectListItem { Text = "--Select State--", Value = "0" });  
54.	            if (states != null)  
55.	            {  
56.	                foreach(var x in states)  
57.	                {  
58.	                      listates.Add(new SelectListItem { Text =x.State, Value =x.SlNo.ToString() });  
59.	  
60.	                }  
61.	  
62.	                
63.	  
64.	            }  
65.	  
66.	  
67.	            return Json(new SelectList(listates, "Value", "Text", JsonRequestBehavior.AllowGet));  
68.	        }  
69.	  
70.	        public JsonResult getCity(int id)  
71.	        {  
72.	            var city = obj.tbl_city.Where(x => x.statecode == id).ToList();  
73.	            List<SelectListItem> licity = new List<SelectListItem>();  
74.	  
75.	            licity.Add(new SelectListItem { Text = "--Select City--", Value = "0" });  
76.	            if (city != null)  
77.	            {  
78.	                foreach (var l in city)  
79.	                {  
80.	                    licity.Add(new SelectListItem { Text = l.District, Value = l.SlNo.ToString() });  
81.	  
82.	                }  
83.	  
84.	  
85.	  
86.	            }  
87.	  
88.	  
89.	            return Json(new SelectList(licity, "Value", "Text", JsonRequestBehavior.AllowGet));  
90.	        }  
91.	  
92.	       
93.	    }  
94.	}  

View

1.	@{  
2.	    ViewBag.Title = "Index";  
3.	}  
4.	  
5.	<h2>Index</h2>  
6.	<script src="~/Scripts/jquery-1.10.2.min.js"></script>  
7.	<script type="text/javascript">  
8.	  
9.	    $(document).ready(function () {  
10.	        
11.	        $("#country").change(function () {  
12.	            $("#State").empty();  
13.	            $.ajax({  
14.	                type: 'POST',  
15.	                url: '@Url.Action("getstate")',  
16.	  
17.	                dataType: 'json',  
18.	  
19.	                data: { id: $("#country").val() },  
20.	  
21.	  
22.	                success: function (states) {  
23.	  
24.	  
25.	                    $.each(states, function (i, state) {  
26.	                        $("#State").append('<option value="' + state.Value + '">' +  
27.	                             state.Text + '</option>');  
28.	  
29.	                    });  
30.	                },  
31.	                error: function (ex) {  
32.	                    alert('Failed to retrieve states.' + ex);  
33.	                }  
34.	            });  
35.	            return false;  
36.	        })  
37.	    });  
38.	  
39.	</script>  
40.	  
41.	<script type="text/javascript">  
42.	  
43.	    $(document).ready(function () {  
44.	       
45.	        $("#State").change(function () {  
46.	            $("#city").empty();  
47.	            $.ajax({  
48.	                type: 'POST',  
49.	                url: '@Url.Action("getcity")',  
50.	                dataType: 'json',  
51.	                data: { id: $("#State").val() },  
52.	                success: function (city) {  
53.	  
54.	                    $.each(city, function (i, city) {  
55.	                        $("#city").append('<option value="'  
56.	                                                   + city.Value + '">'  
57.	                                             + city.Text + '</option>');  
58.	                    });  
59.	                },  
60.	                error: function (ex) {  
61.	                    alert('Failed.' + ex);  
62.	                }  
63.	            });  
64.	            return false;  
65.	        })  
66.	    });  
67.	</script>  
68.	<div style=" background-color:aqua; border-color:black; border:solid">  
69.	  
70.	  
71.	    <div>  
72.	        <b>Select Country</b>  
73.	    </div>  
74.	    <div>  
75.	        @Html.DropDownList("country", ViewBag.country as List<SelectListItem>, new { style = "width: 200px;" })  
76.	  
77.	    </div>  
78.	    <br />  
79.	  
80.	    <div>  
81.	        <b>Select State</b>  
82.	    </div>  
83.	    <div>  
84.	        @Html.DropDownList("State", new SelectList(string.Empty, "Value", "Text"), "--Select State--", new { style = "width:200px" })  
85.	    </div>  
86.	     
87.	    <br />  
88.	    <div>  
89.	        <b>Select Region</b>  
90.	    </div>  
91.	    <div>  
92.	  
93.	        @Html.DropDownList("city", new SelectList(string.Empty, "Value", "Text"), "--Select City--", new { style = "width:200px" })  
94.	  
95.	    </div>  
96.	  
97.	</div>  


آموزش asp.net mvc
فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید