PDA

View Full Version : There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'SubjectID'



resident
سه شنبه 22 مرداد 1392, 19:16 عصر
ببخشید تکراری گذاشتم نمیدونم چرا قبلیها فیلتر شد!!!

سلام.
من یه dropdownlist برای موضوع ها دارم. وقتی createرو میزنم dropdownlist رو میسازه اما وقتی فیلدها رو پر می کنم و میخوام فرم کلی رو ذخیره کنم Exception زیر رو روی همون dropdownlist میده.
کدهاشو میذارم. با همین روش تو فرمهای دیگه dropdownlist رو پر می کنم و کل فرم رو ذخیره می کنم مشکلی نیست ولی نمیدونم چرا اینجا خطا میده
اینم خطا:

There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'SubjectID'.

Controller:

public ActionResult Create()
{
ViewBag.Subjectlist = new SelectList(GetSubjectList("*"), "ID", "Title");
return View();
}

public List<Subject> GetSubjectList(string SelectedColumns)
{
CRM.BLL.Business. SubjectBusiness SubjectBo = new BLL.Business. SubjectBusiness();
return SubjectBo.GetSelectQuery(SelectedColumns, "", "Subject_Title", SortOrder.Assending, userId).Cast<Subject>().ToList();
}



View:

<div class="editor-label">
@Html.LabelFor(model => model.SubjectID)
</div>
<div class="editor-field">
@Html.DropDownList("SubjectID",(SelectList)(ViewData["Subjectlist"]))
</div>

hakim22
سه شنبه 22 مرداد 1392, 19:48 عصر
فیلتر شدنش بخاطر اینه که سه بار پشت سر هم نوشته x در عنوان پست !

اشکالش اینه که شما در قسمت کنترلر نوشتی :


ViewBag.Subjectlist = new SelectList(GetSubjectList("*"), "ID", "Title");


و در قسمت View نوشتی :

@Html.DropDownList("SubjectID",(SelectList)(ViewDa ta["Subjectlist"]))


اگر در مدل خصوصیت با نام SubjectID هست در کنترلر هم باید موقع ساختن SelectList بجای ID از SelectID استفاده کنید.

در ضمن خیلی بهتره از DropDownListFor استفاده کنید :

@Html.DropDownList(model=> model.SubjectID,(SelectList)(ViewData["Subjectlist"]),"انتخاب موضوع")

resident
سه شنبه 22 مرداد 1392, 20:07 عصر
hakim جان نشد که نشد...
تو مدل Subject ما ID داریم و Title که خب دستور زیر درسته:
ViewBag.Subjectlist = new SelectList(GetSubjectList("*"), "ID", "Title");


از طرفی تو یه مدل دیگه از SubjectID برای اون استفاده کردیم
پس
@Html.DropDownList("SubjectID",(SelectList)(ViewDa ta["Subjectlist"]))

درسته. البته طبق فرمایش شما ID هم گذاشتم ولی درست نشد :ناراحت:

hakim22
سه شنبه 22 مرداد 1392, 20:33 عصر
مشکل اینه که ورودی به selectList از نوع لیست نیست . (باید از نوع IEnumerableباشه)
در

GetSubjectList("*")


متد ToList() رو اضافه کنید

به صورت :


GetSubjectList("*").ToList()


باز هم میگم که از DropDownListFor استفاده کنید. در مدل نهایی SubjectID درسته (عین همین مورد رو من در پروژه های خودم دارم)

resident
سه شنبه 22 مرداد 1392, 20:49 عصر
حکیم جان از DropDownListForهم استفاده کردم همین پیغام رو میده.
اما فکر نمی کنم تو ساخت DropDownList مشکلی باشه چون DropDownListFor رو میسازه اما نمی تونه مقدارش رو به کنترلر بر گردونه.
مشکل رو پیدا کردم. موقع save ، ویودیتای ViewData["Subjectlist"] نال میشه. به خاطر اینه خطا میده.
علت چیه و چطور میشه حلش کرد؟

hakim22
سه شنبه 22 مرداد 1392, 21:23 عصر
ولی فکر نمیکنم null بشه بلکه null انتقال داده میشه .
شما در خطی که Return view دارید یک BreakPoint قرار بدید و بعد مقدار selectList رو بررسی کنید.
در ضمن شما در کنترلر از ViewBag استفاده کردید و در View از ViewData
دقیقا مطمئن نیستم ولی فکر نمیکنم دو شی ViewBag و ViewData بتونن دادههاشونو پاس کاری کنن!
پس همه جا یا از ViewBag یا از ViewData استفاده کنید.

در آخر اینکه داده های ViewBag بعد از Redirect شدن View از بین میروند.

resident
سه شنبه 22 مرداد 1392, 21:56 عصر
شما در خطی که Return view دارید یک BreakPoint قرار بدید و بعد مقدار selectList رو بررسی کنید.

null است.


در ضمن شما در کنترلر از ViewBag استفاده کردید و در View از ViewData
تو جاهای دیگه پروژه دقیقا از همین کدها استفاده کردم ولی جواب میده و داره کار می کنه. نمیدونم اینجا چرا اینطور شده!


پس همه جا یا از ViewBag یا از ViewData استفاده کنید.
این کار رو هم کردم. متن خطا تغییری نکرد