View Full Version : سوال: راهنمایی کار با Dropdownlist
milan2004
شنبه 22 اسفند 1394, 03:56 صبح
سلام
چند سوال در باره کار با dropdowlist ها داشتم:
1- در view model چه نوعی property رو تعریف کنم که بشه مقادیر دراپ داون رو در اون ریخت
2 - چگونه مقدار انتخاب شده توسط کاربر بصورت binding در کنترلر دریافت شود (چه id چه مقدار رشته)
لطفا یک نمونه بیان کنید که آموزشی خوب برای بقیه افراد نیز باشد ممنون
r4hgozar
شنبه 22 اسفند 1394, 04:32 صبح
سلام.
فکر نکمک به این صورت بشه که خودش بیاد و برات بسازه.
می تونه از viewbag برای درست کردن dropdown استفاده کنی.
milan2004
شنبه 22 اسفند 1394, 05:04 صبح
میشه مثلا به اینصورت کار کرد؟یک پراپرتی
public selectlist select{get;set;}
در viewmodel تعریف کرد بعدش موقع پر کردن هم بصورت :
("model.Selectedlist= new SelectList(db.Categories.ToList(), "id", "Name
r4hgozar
شنبه 22 اسفند 1394, 05:42 صبح
سلام.
من تا حالا این کار رو به این صورت که شما می گی انجام ندادم.
و نمی تونم بگم
من خودم بصورت یک لیست در viewbag این کار رو انجام میدم.
http://stackoverflow.com/questions/17727386/dropdownlist-in-mvc-4-with-razor
تو این ادرس چند روش توضیح داده شده. می تونی از هر کدوم خاصتی استفاده کنی.
r4hgozar
شنبه 22 اسفند 1394, 05:44 صبح
البته شما وقتی مقدار bool? رو در ویو در نظر بگیری برای شما یک dropdown میسازه و داخلش رو از true , false پر می کنه.
اما بستگی داره شما می خوای dropdown از چی پر بشه.
milan2004
شنبه 22 اسفند 1394, 06:25 صبح
حالا میشه بگید مقدار دراپ داوون رو چجوری تو کنترلر دریافت کنم ؟با formcollection?
arashnaderi
شنبه 22 اسفند 1394, 06:48 صبح
سلام کار با دراپ دوان ها خیلی راحته دوست عزیز. نمونه کداشم زیاده خب.
ببین چطوری قراره استفاده کنی؟
دو حالتش اینه که میخوای توی view یه دراپ دوان باشه که از جدولت میخونه و پر میشه و فقط توی کدبیهایند ، آی دی سطری که انتخاب کرده رو استفاده کنی
یا اینکه اول توی کد بیهایند پرش کنی و بیای توی view نمایشش بدی و بعد دوباره مثل بالا آی دیشو بخونی توی کدبیهایند
milan2004
شنبه 22 اسفند 1394, 07:48 صبح
تمام مواردی که گفتید رو من قرار انجام بدم بخش اول مشکل ندارم من با بخش دوم که قرار id ویا مقدار انتخاب شده دراپ داون رو در کنترلر بگیرم مشکل دارم .
ممنون بابت پاسخ هایی که میگید دلگرم کنندست
arashnaderi
شنبه 22 اسفند 1394, 08:18 صبح
خب یک مثال: من میخوام همزمان با درج یک رکورد برای دانلود، دسته ی این رکورد رو هم اضافه کنم(لیست دسته ها توی دراپ دوان هستش):
اول تعریف مدلت:
[Required(ErrorMessage = "پر کردن فیلد {0} الزامی است")]
[RegularExpression("([1-9][0-9]*)", ErrorMessage = "عدد وارد شده صحیح نمی باشد")]
[Range(1, int.MaxValue, ErrorMessage = "عدد وارد شده در محدوده مجاز نمی باشد")]
[Display(Name = "انتخاب دسته")]
public int DownloadCategoryID { get; set; }
[Display(Name = "لیست دسته ها")]
public IList<SelectListItem> CategoryList { get; set; }
دوم پر کردنش در کدبیهایند(دستور insert بدون post):
Download model = new Download
{
CategoryList = DownloadCategory.SelectList()
};
return View(model);
پیاده سازی دستور DownloadCategory.SelectList :
public static IList<SelectListItem> SelectList(params int[] listID)
{
using (ProjectModel context = new ProjectModel())
{
return (from item in context.DownloadCategories
orderby item.Title descending
select new SelectListItem
{
Value = item.ID.ToString(),
Text = item.Title,
Selected = listID.Any(val => item.ID == val)
}).ToList();
}
}
سوم View:
<div class="form-group">
@Html.LabelFor(model => model.DownloadCategoryID, new { @class = "col-sm-2 control-label" })
<div class="col-sm-3">
@Html.DropDownListFor(model => model.DownloadCategoryID, Model.CategoryList, new { @class = "form-control" })
</div>
<div class="col-sm-7">
@Html.ValidationMessageFor(model => model.DownloadCategoryID, "", new { @class = "color-danger" })
</div>
</div>
چهارم بعد از post شدن صفحه:
[HttpPost]
[ValidateAntiForgeryToken]
public virtual ActionResult Insert(Download obj)
{
if (ModelState.IsValid)
{
Download.Insert(obj);
}
obj.CategoryList = DownloadCategory.SelectList(obj.DownloadCategoryID );
return View(obj);
}
CategoryList بعد از post شدن، null میشه که باید دوباره پرش کنی ولی اینبار سطری انتخابه که قبل از ارسال کاربر انتخاب کرده بود.
milan2004
شنبه 22 اسفند 1394, 09:49 صبح
مرسی بابت توضیح step by step و آموزنده ات واقعا عالی بود ممنون
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.