יש לי פרוייקט של ספרייה. כל ספר יש לו מאפיין של שם המחבר ושל הקטגוריה שלו. שני המאפיינים הללו הם בעצם אובייקט נפרד ממחלקה של מחברים, וקטגוריות.
בתצוגה האוט' שנוצרה לי היא לא כללה את המאפיינים הללו (כי הם לא חלק מהטבלה בDB, אלא מפתח זר). לכן הוספתי בתצוגה גם אותם. אולם זה לא עוזר, כיון שכדי ליצור את האובייקט אני בעצם צריך לעדכן גם את 2 הטבלאות הללו.
אני רוצה, שכשהוא טוען את התצוגה הוא יציג ברשימה נפתח כבר את הפריטים הקיימים בטבלאות הללו (כדי שהמשתמש יוכל לבחור ממחברים קיימים או להוסיף חדש).
לכן כתבתי את הקוד הבא במתודה Create:
// GET: Books/Create
public ActionResult Create()
{
Book book = new Book();
ViewBag.Model = book;
ViewBag.Model.AuthorsName1.AuthorName = new SelectList(db.Authors, "", "AuthorsName");
ViewBag.Model.AuthorsName2.AuthorName = new SelectList(db.Authors, "", "AuthorsName");
ViewBag.Model.Subject.Subject = new SelectList(db.SubjectBooks, "", "Subject");
return View();
}
אולם אני מקבל שגיאת ריצה: "לא ניתן לבצע איגוד זמן ריצה בהפניה לערך Null". מי פירוש NULL? הרי בדטהבייס יש נתונים?
כמו כן,
כיצד במתודת הPOST (ששולחת את הנתונים שהזין המשתמש) אני יכול להריץ שאילתא על הטבלאות הנוספות לבדוק אם הערך שהוא הזין קיים בהם, ואם לא להוסיף חדש?
כתבתי כך:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Title,Expenditure,YearOfPublication,Release")] Book book)
{
if (ModelState.IsValid)
{
var authors1 = db.Authors.Where(x => x.AuthorName.Contains(book.AuthorsName1.AuthorName));
var authors2 = db.Authors.Where(x => x.AuthorName.Contains(book.AuthorsName2.AuthorName));
var subject = db.SubjectBooks.Where(x => x.Subject.Contains(book.Subject.Subject));
if (!authors1.Equals(book.AuthorsName1.AuthorName))
db.Authors.Add(book.AuthorsName1);
if (!authors2.Equals(book.AuthorsName2.AuthorName))
db.Authors.Add(book.AuthorsName2);
if (!subject.Equals(book.Subject.Subject))
db.SubjectBooks.Add(book.Subject);
db.Books.Add(book);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(book);
}
אבל זה לא עובד.. אני כל הזמן מקבל שגיאה שהערכים הללו (מחברים ונושא) הם ערכי חובה (מהשרת, לא מהAJAX). כלומר, זה אומר שהוא לא הצליח להזין אותם לשרת..
אשמח לעצות והארות!
תודה רבה!
פורסם במקור בפורום CODE613 ב18/10/2015 14:56 (+03:00)