ورود

View Full Version : حرفه ای: نحوه تشخیص آیتم سلکت شده توسط دراپ دان لیست که به صورت دستی ایجاد شده



bftarane
چهارشنبه 05 مهر 1396, 10:43 صبح
سلام
یک سوال مفهومی داشتم


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


این مدل هست

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 انجام میشه ولی به چه صورت؟

ممنون می شم توضیح بدید!

Moien Tajik
چهارشنبه 05 مهر 1396, 12:18 عصر
آیتم انتخاب شده در Dropdown ، بهش یک Attribute به اسم selected اضافه میشه که وقتی شما فرم رو POST میکنید ، اون Option که این Attribute رو داره Submit میشه .
با استفاده از این مورد شما میتونید در DOM ، آیتم انتخاب شده ( selectedIndex ) رو با Javascript تغییرش بدید : https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_select_selectedindex



<select id="mydropdown">
<option value="1">test1</option>
<option value="2" selected="selected">test2</option>
<option value="3">test3</option>
</select>


اگر این کد رو امتحان کنید ، میبینید که نتیجش 2 هست که Value اون آیتمی هست که selected داره :

var dropdown = document.getElementById("mydropdown");
var selectedIndex = dropdown.options[dropdown.selectedIndex].value;
alert(selectedIndex);


نمونه آنلاین : https://jsfiddle.net/MoienTajik/nvpsgt73/1/

bftarane
چهارشنبه 05 مهر 1396, 14:31 عصر
دقیقا الان مسئله اینه که اون اتریبیوت Selected در ویو سورس مشاهده نمیشه، یعنی وقتی آیتم انتخاب میشه selected اضافه نمی شه به آیتم، پس این قضیه داره جوری دیگه ای یا جای دیگه ای مدیریت میشه
ببینید این دقیقا نتیجه ای هست که در html به صورت اتوماتیک ایجاد میشه


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



حالا کجا داره این قضیه مدیریت میشه و چطور این selected تشخیص داده میشه برام معماست!