PDA

View Full Version : خطا کلیدخارجی به هنگام ارسال لیستی از object ها به کنترلر create



آنتریوم
دوشنبه 10 تیر 1392, 19:22 عصر
من با List یه سری item رو میخوام از view بگیرم بدم به کنترلر ولی نمیدونم چرا این ارور رو میده. برای یه item صحیح هست و این ارور رو نمیده ولی برای list ای از item ها نه. ایرادش تو قستDropDownList هست احتمالا اینجا داره ازبین یه لیستی برای itemTypeID مقدار میگیره که تو item کلید خارجی هست ولی این انتساب وقتی داریم یه لیستی از item ها رو مقداردهی می کنیم درست جواب نمیده. لطفا دانشتون رو از من دریغ نکنید مرسی
این create :


[HttpPost]
publicActionResult Create(List<Item> myitems)
{
foreach (var myitem in myitems)

{

if (ModelState.IsValid)

{

db.Items.Add(myitem);

db.SaveChanges();


return RedirectToAction("Index");

}

ViewBag.itemTypeID =
newSelectList(db.ItemTypes, "itemTypeID", "itemTypeTitle",myitem.itemTypeID);

ViewBag.itemID =
newSelectList(db.Deliveries, "itemID", "seating", myitem.itemID);

}


return View();

}

اینم view:


@
for(int i=0;i<=2;i++)

{


<tr>


<td>

@i


</td>


<tdclass="editor-field">

@Html.EditorFor(model => model[i].numofproperty)

@Html.ValidationMessageFor(model => model[i].numofproperty)


</td>


<tdclass="editor-field">

@Html.DropDownList(
"itemTypeID", String.Empty)

@Html.ValidationMessageFor(model => model[i].itemTypeID)


</td>


<tdclass="editor-field">

@Html.EditorFor(model => model[i].submission)

@Html.ValidationMessageFor(model => model[i].submission)


</td>


</tr>

}

خطا:
A foreign key value cannot be inserted because a corresponding primary key value does not exist. [ Foreign key constraint name = Item_ItemType ]

ali_autumnal
دوشنبه 10 تیر 1392, 22:49 عصر
به لینک های زیر نگاه کنید
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

http://barnamenevis.org/showthread.php?391086-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D9%84%DB%8C%D8%B3%D8%AA%DB%8C-%D8%A7%D8%B2-%D9%85%D8%AF%D9%84-%D9%87%D8%A7

آنتریوم
دوشنبه 10 تیر 1392, 23:30 عصر
دستتون درد نکنه ولی فکر کنم تو ایجاد لیستی از کلاسمو اینا مشکل نداشته باشه مشکلش اینجاست احتمالا


<tdclass="editor-field"> @Html.DropDownList("itemTypeID", String.Empty) @Html.ValidationMessageFor(model => model[i].itemTypeID) </td>


باید به جای DropDownList از DropDownListFor استفاده کنم ولی نمی دونم چه شکلی



<td class="editor-field">

@Html.DropDownListFor(model=> model[i].itemTypeID,
"itemTypeID");

@Html.ValidationMessageFor(model => model[i].itemTypeID)


</td>

این کد ارور میده :افسرده:

ali_autumnal
سه شنبه 11 تیر 1392, 09:24 صبح
من نگفتم اونا مشکل داره!!!

اما اون کدی که شما بالا قرار دادین جالب نبود. در نتیجه من او لینک هارو اول معرفی کردم.
از طرفی اون بالا داخل حلقه این if (ModelState.IsValid) چیکار میکنه؟

قبل از همه کدهاتون این شرط رو قرار بدید if (ModelState.IsValid)

Saeed_m_Farid
شنبه 15 تیر 1392, 11:31 صبح
سلام


کدهاتون رو داخل تگ قرار بدین که بشه خوند:
[CSHARP] [HttpPost]
public ActionResult Create(List<Item> myitems)
{
foreach (var myitem in myitems) // اینجا
{
if (ModelState.IsValid)
{
db.Items.Add(myitem);
db.SaveChanges();
return RedirectToAction("Index"); // مشکل ؟!
}

ViewBag.itemTypeID = new SelectList(db.ItemTypes, "itemTypeID", "itemTypeTitle", myitem.itemTypeID); // مشکل ؟!
ViewBag.itemID = new SelectList(db.Deliveries, "itemID", "seating", myitem.itemID); // مشکل ؟!
}
return View();
}
اشتباهات عجیب و غریب کدتون رو اول باید اصلاح کنید که بریم سراغ مشکل اصلی! foreach فقط باید شامل عملیات db باشه؛ با این کد شما، هردفعه تابع return میکنه و ...
بدون مدل و با این کد، سخت بشه نظری داد؛ ولی به احتمال قوی مقادیر به myitems درست پاس داده نمیشن.
بعد اینکار اگه trace کنید کدتون رو، اگه باز هم مشکل ادامه داشت، احتمالاً فیلد Foreign key تو step بعدی foreach مقداردهی نمیشه؛ اگه اینطور بود، مشکل ممکنه برای تمام فیلدها باشه، مقادیر رو تو step های اول و بعدی چک کنید؛ ولی بعید میدونم اولی مغداردهی بشه، بقیه نه!

به هرصورت، مشکل - همونطوریکه خطا واضح میگه - از کلید خارجی روی ItemType هست، اگه داخل ModelState.IsValid میشه، مدل رسیده رو Trace کنید، ببینین چی بهش پاس میشه؟