مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

mohammad-zarei

عضویت از 1395/12/02

چطور دوتا dropdownlist رو با هم bind کنم؟

  • دوشنبه 2 اسفند 1395
  • 23:02
تشکر میکنم

سلام دوستان.

دوتا dropdownlist دارم که توی یکیشون لیست استان ها هست و توی دیگری لیست شهر ها که هر دو از دیتابیس پر میشن. می خوام وقتی از dropdownlist استان یه استانی رو انتخاب کردم شهر های مربوط به همون استان توی dropdownlist دیگه نشون داده بشه. لطفا اگه نمونه کد بزارید ممنون میشم

پاسخ های این پرسش

تعداد پاسخ ها : 6 پاسخ
کاربر سایت

mohammad-zarei

عضویت از 1395/12/02

  • پنجشنبه 5 اسفند 1395
  • 22:03

سلام دوباره. این دو روزه هرچی سعی کردم نتونستم انجامش بدم. asp رو کامل واردم ولی تازه mvc رو شروع کردم.

من دوتا جدول دارم یکی به نام tbl_state با دو فیلد StateId و State و دیگری tbl_city با سه فیلد CityId و City و StateId

روی پروژه رو هم راست کلیک کردم و یه ADO.Net entity data model بنام TestEF که توش دوتا جدول رو هم سلکت کردم، قرار دادم

میشه یه نمونه کد برام بزارید که من بهتر درک کنم؟

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • پنجشنبه 5 اسفند 1395
  • 22:13
https://barnamenevisan.org/Articles/Article3022.html
کاربر سایت

mohammad-zarei

عضویت از 1395/12/02

  • جمعه 6 اسفند 1395
  • 13:12

ممنون مشکلم حل شد منتهی من توی ویو مربوط به edit می خوام این کار رو انجام بدم و زمانی که وارد صفحه ادیت میشم اولین استان (آذربایجان شرقی) بعنوان استان و اولین شهر (آذرشهر) بعنوان شهر انتخاب شده هست در حالی که باید مثلا گیلان و رشت انتخاب شده باشه. مشکل دوم اینه که مثلا من استان اصفهان رو انتخاب می کنم و شهر نجف آباد آی دی اصفهان درست میشینه ولی آی دی شهر 4 می خوره که چهارمین شهر توی استان اصفهانه !! درحالی که CityId باید 63 (نجف آباد) باشه نه 4

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • جمعه 6 اسفند 1395
  • 16:16

برای پر کردن DDL شما در اکشن یک SelecvtList دارید

پارامتر 4 میتونید Value که باید انتخاب بشه رو قرار  دهید

کاربر سایت

mohammad-zarei

عضویت از 1395/12/02

  • شنبه 7 اسفند 1395
  • 21:03

تشکر دوباره

تقریبا تموم شده منتهی یه مشکل دارم زمانی که کد صفحه 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 هستند

از روشی که توی اینجا گفتید رفتم

با تشکر

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)