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

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

کاربر سایت

بهاره فیضی

عضویت از 1392/11/03

سوال مفهومی، نحوه تشخیص آیتم انتخاب شده در دراپ دان لیست توسط asp.net mvc

  • چهارشنبه 5 مهر 1396
  • 11:09
تشکر میکنم

سلام

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

این مدل هست

 public class testGroup
    {
        [Key]
        public int ID { get; set; }
        public string Title { get; set; }
        public int ParentID { get; set; }
    }

این کد اکشن هست

 public ActionResult Create()
        {
            IEnumerable<testGroup> mylist = db.Database.SqlQuery<testGroup>(@"select * from testGroups");

            ViewBag.ParentID = new SelectList(mylist, "ID", "Title");

            return View();
        }

        // POST: Administrator/testGroups/Create
        // 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 Create([Bind(Include = "ID,Title,ParentID")] testGroup testGroup)
        {
            if (ModelState.IsValid)
            {
                db.testGroups.Add(testGroup);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(testGroup);
        }

و این کد ویو

<select class="form-control" id="ParentID" name="ParentID">
            @foreach (var item in ViewBag.ParentID)
            {
                <option value="@item.Value">@item.Text</option>
            }
        </select>

همونطور که می بینید یک System.Web.Mvc.SelectList به یک ViewBag به اسم ParentID پاس داده میشه

حالا می خوام بدونم mvc چطور متوجه می شه که کدوم آیتم از دراپ دان انتخاب شده، چون وقتی درج انجام میشه دقیقا و به درستی مقدار آیتم انتخاب شده رو به عنوان ParentID در دیتابیس ثبت می کنه.

قبلا که توسط هلپر html.dropdownlist این اتفاق صورت می گرفتم فکر می کردم در خود هلپر کدهایی نوشته شده که این قضیه رو مدیریت کنه، ولی الان که از این هلپر استفاده نکردم و توسط یک Foreach دراپ دان رو خودم ایجاد کردم می بینم باز همون اتفاق مدیریت شده، بنابراین احتمالا این مدیریت داره توسط System.Web.Mvc.SelectList انجام میشه ولی به چه نحو؟

ممنون میشم در این مورد توضیح بدید، واقعا گیج شدم!

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

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

سهیل علیزاده

عضویت از 1396/04/09

  • چهارشنبه 5 مهر 1396
  • 11:23

هنگام شما یکی از item  های DropDown را انتخاب می کنید در سمت Html آن item به نام selected نشانه گذاری می شود و زمانی که آن را به Controller ارسال می کنید تنها مقدار selected شده ارسال می شود، و برای دریافت هم به این شکل عمل می شود.

کاربر سایت

بهاره فیضی

عضویت از 1392/11/03

  • چهارشنبه 5 مهر 1396
  • 12:18

منظورتون از اینکه به selected نشانه گذاری میشه چیست؟

اگه منظورتون این هست

<option value="1" selected>test</option>

همچنین چیزی در View> Sorce دیده نمی شه.

و آپشن ها همه فقط دارای Value و Text هستن، برای هیچ کدوم selected مشاهده نمی شه.

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • چهارشنبه 5 مهر 1396
  • 12:42

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

کاربر سایت

بهاره فیضی

عضویت از 1392/11/03

  • چهارشنبه 5 مهر 1396
  • 14:51

میشه بیشتر مکانیسمش رو توضیح بدید؟

منظورتون از اینکه توسط مرورگر مدیریت میشه چیست؟

یعنی کجا این حالت نگهداری میشه؟ منظورتون کوکی هست؟

چون من بررسی کردم دیدم وقتی به جای  System.Web.Mvc.SelectList یک لیست رو مستقیما پاس بدیم به ViewBag و دراپ دان رو به همون شکلی که گفتم به صورت دستی ایجاد کنیم دیگه مقدار انتخاب شده نگهداری نمیشه و باید خودمون اون رو مدیریت کنیم.

دوستان اگه این رو دقیق تر با جزئیات توضیح بدین ممنون میشم.

اگه فرضا بخواهیم یک Extenstion method برای html.dropdownlst بنویسیم دونستن جزئیات این مورد به نظر من الزامیه.

کاربر سایت

ایمان مدائنی

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

  • چهارشنبه 5 مهر 1396
  • 15:51

اینکار توسط ModelBinding در MVC اننجام میشه

وقتی شما آیتمی انتخاب میکنید یه فیلد شامل نام اون المان و Value انتخاب شده به سرور ارسال میشه و بعد ModelBinding مقدار را در Model قرار میده

کاربر سایت

ایمان مدائنی

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

  • چهارشنبه 5 مهر 1396
  • 16:26

بله

اون فضای نام فقط برای نمایش استفاده میشه

کاربر سایت

بهاره فیضی

عضویت از 1392/11/03

  • چهارشنبه 5 مهر 1396
  • 16:32

ببخشید، الان بدون پاس دادن لیست از طریق کنترلر و فقط به صورت دستی این کدها رو در ویو نوشتم و دیدم درج داره به درستی صورت می گیره و قضیه برام جا افتاد، هنوز جواب آخرتون رو ندیده بودم که سوالم رو پاک کردم.

<select class="form-control" id="ParentID" name="ParentID">
            <option value="1">test</option>
            <option value="2">test2</option>
            <option value="3">5555555555</option>
        </select>

ممنون از راهنمایی.

کاربر سایت

mvc_esmaeili

عضویت از 1395/08/22

  • پنجشنبه 6 مهر 1396
  • 12:33
فکر کنم مهمترین بخش mvc بخش modelbinding باشه
کاربرانی که از این پست تشکر کرده اند

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

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

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