سلام دوستان.
دوتا dropdownlist دارم که توی یکیشون لیست استان ها هست و توی دیگری لیست شهر ها که هر دو از دیتابیس پر میشن. می خوام وقتی از dropdownlist استان یه استانی رو انتخاب کردم شهر های مربوط به همون استان توی dropdownlist دیگه نشون داده بشه. لطفا اگه نمونه کد بزارید ممنون میشم
سلام دوباره. این دو روزه هرچی سعی کردم نتونستم انجامش بدم. asp رو کامل واردم ولی تازه mvc رو شروع کردم.
من دوتا جدول دارم یکی به نام tbl_state با دو فیلد StateId و State و دیگری tbl_city با سه فیلد CityId و City و StateId
روی پروژه رو هم راست کلیک کردم و یه ADO.Net entity data model بنام TestEF که توش دوتا جدول رو هم سلکت کردم، قرار دادم
میشه یه نمونه کد برام بزارید که من بهتر درک کنم؟
ممنون مشکلم حل شد منتهی من توی ویو مربوط به edit می خوام این کار رو انجام بدم و زمانی که وارد صفحه ادیت میشم اولین استان (آذربایجان شرقی) بعنوان استان و اولین شهر (آذرشهر) بعنوان شهر انتخاب شده هست در حالی که باید مثلا گیلان و رشت انتخاب شده باشه. مشکل دوم اینه که مثلا من استان اصفهان رو انتخاب می کنم و شهر نجف آباد آی دی اصفهان درست میشینه ولی آی دی شهر 4 می خوره که چهارمین شهر توی استان اصفهانه !! درحالی که CityId باید 63 (نجف آباد) باشه نه 4
برای پر کردن DDL شما در اکشن یک SelecvtList دارید
پارامتر 4 میتونید Value که باید انتخاب بشه رو قرار دهید
تشکر دوباره
تقریبا تموم شده منتهی یه مشکل دارم زمانی که کد صفحه edit به شکل زیره
<div class="form-group"> @Html.Label("استان", htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.DropDownList("OstanId", ViewBag.OstanId as SelectList, htmlAttributes: new { @class = "form-control",@id="OstanId" }) @Html.ValidationMessageFor(model => model.OstanId, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.Label("شهر", htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.DropDownList("ShahrId", ViewBag.ShahrId as SelectList, htmlAttributes: new { @class = "form-control", @id = "DropDownListcity" }) @Html.ValidationMessageFor(model => model.ShahrId, "", new { @class = "text-danger" }) </div> </div>
توی دوتا ddl ها اولین گزینه ها یعنی آذربایجان شرقی و آذر شهر انتخاب شده هست. و پس از انتخاب استان و شهر درست خودتون بدون مشکل ذخیره میشه. اما مشکل من اینه که می خوام زمان ورود به صفحه edit استان و شهر انتخاب شده قبلی نمایش داده بشه نه اولین استان و اولین شهر. کد رو به صورت زیر تغییر دادم
<div class="form-group"> @Html.Label("استان", htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.DropDownList("Ostan", ViewBag.OstanId as SelectList, htmlAttributes: new { @class = "form-control",@id="OstanId" }) @Html.ValidationMessageFor(model => model.OstanId, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.Label("شهر", htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.DropDownList("Shahr", ViewBag.ShahrId as SelectList, htmlAttributes: new { @class = "form-control", @id = "DropDownListcity" }) @Html.ValidationMessageFor(model => model.ShahrId, "", new { @class = "text-danger" }) </div> </div>
توی این حالت استان و شهر قبلی نمایش داده میشه و همونیه که می خوام. منتهی توی کد db.SaveChanges(); در کنترلر، موقع ذخیره ارور زیر رو میده:
An exception of type 'System.Data.Entity.Infrastructure.DbUpdateException' occurred in EntityFramework.dll but was not handled in user code
کد اسکریپتم اینه:
<script> $('#OstanId').change( function GetState() { $.ajax({ url: "@Url.Action("GetJsonState", "Project")", dataType: "json", type: "GET", data: { id: $("#OstanId").val() }, error: function () { }, beforeSend: function () { }, success: function (data) { var items = ""; items = "<option value=''>شهر را انتخاب نمایید</option>"; $.each(data, function (i, item) { items += "<option value='" + item.Value + "'>" + item.Text + "</option>"; }); $("#DropDownListcity").html(items); } }); } ); </script>
و کد edit توی کنترلر:
public ActionResult Edit(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } ProjectTB projectTB = db.ProjectTB.Find(id); if (projectTB == null) { return HttpNotFound(); } ViewBag.CustomerId = new SelectList(db.CustomerTB, "CustomerId", "Name", projectTB.CustomerId); ViewBag.PhaseId = new SelectList(db.PhaseTB, "PhaseId", "Name", projectTB.PhaseId); ViewBag.ProjectId = new SelectList(db.ProjectTB, "ProjectId", "Address", projectTB.ProjectId); ViewBag.ProjectId = new SelectList(db.ProjectTB, "ProjectId", "Address", projectTB.ProjectId); ViewBag.ShahrId = new SelectList(db.tbl_city, "CityId", "Name", projectTB.ShahrId); ViewBag.OstanId = new SelectList(db.tbl_state, "StateId", "Name", projectTB.OstanId); return View(projectTB); } public IList<tbl_city> Getstate(int id) { return db.tbl_city.Where(m => m.StateId == id).ToList(); } public JsonResult GetJsonState(int id) { var stateListt = this.Getstate(Convert.ToInt32(id)); var statesList = stateListt.Select(m => new SelectListItem() { Text = m.Name, Value = m.CityId.ToString() }); return Json(statesList, JsonRequestBehavior.AllowGet); } // POST: Project/Edit/5 // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see http://go.microsoft.com/fwlink/?LinkId=317598. [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "ProjectId,CustomerId,OstanId,ShahrId,PhaseId,Address,TedadTabaghat,IsBond,Skelet")] ProjectTB projectTB) { if (ModelState.IsValid) { db.Entry(projectTB).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.CustomerId = new SelectList(db.CustomerTB, "CustomerId", "Name", projectTB.CustomerId); ViewBag.PhaseId = new SelectList(db.PhaseTB, "PhaseId", "Name", projectTB.PhaseId); ViewBag.ProjectId = new SelectList(db.ProjectTB, "ProjectId", "Address", projectTB.ProjectId); ViewBag.ProjectId = new SelectList(db.ProjectTB, "ProjectId", "Address", projectTB.ProjectId); ViewBag.ShahrId = new SelectList(db.tbl_city, "CityId", "Name", projectTB.ShahrId); ViewBag.OstanId = new SelectList(db.tbl_state, "StateId", "Name", projectTB.OstanId); return View(projectTB); }
نکته دیگه اینه که دوتا فیلد توی جدول دارم که با جدول استان و شهر در ارتباطند و اون دوتا OstanId و ShahrId هستند
از روشی که توی اینجا گفتید رفتم
با تشکر
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)