public object Edit([Bind(Prefix = "")]Preference preference, string course,
		                   string prof, string CourseList)
        {
            ViewData["Title"] = "Edit Preference";
            ViewData["Message"] = "Edit a Preference";

            // redisplay form immediately if there are input format errors
            if (!ViewData.ModelState.IsValid)
                return View(preference);
            int profId;
            try {
                profId = Convert.ToInt32(prof);
                ViewData["id"] = prof;
            } catch (Exception) {  //not an integer
                return RedirectToAction("Index", "Professor");
            }
            int courseId;
            try {
                courseId = Convert.ToInt32(course);
            } catch (Exception) { //not an integer
                return this.RedirectToAction(c => c.Show(prof));
            }
            try {
                var prefProv = new PreferencesProvider();
                Preference pref = prefProv.GetPreferenceByProfIdAndCourseId(profId, courseId);
                if (pref != null) {
                    Course cour = (new CourseProvider()).GetCourseByID(Convert.ToInt32(CourseList));
                    pref.Id.Course = cour;
                    pref.Weight = preference.Weight;
                    prefProv.UpdatePreference(pref);
                    return View("Saved");
                }
                return this.RedirectToAction(c => c.Show(prof));
            } catch (RuleViolationException vex) {
                ViewData.ModelState.CopyValidationExceptions(vex);
                PrepareCoursesList(preference);
                return View("Edit", preference);
            } catch (Exception err) {
                ViewData.ModelState.CopyValidationExceptions(err, "preference");
                PrepareCoursesList(preference);
                return View("Edit", preference);
            }
        }
        public ActionResult Delete(string prof, string course)
        {
            int profId, courseId;
            try {
                profId = Convert.ToInt32(prof);
                ViewData["id"] = prof;
            } catch (Exception)   //not an integer
            {
                return RedirectToAction("Index", "Professor");
            }
            try {
                courseId = Convert.ToInt32(course);
            } catch (Exception)   //not an integer
            {
                return this.RedirectToAction(c => c.Show(prof));
            }

            try {
                var prefProvider = new PreferencesProvider();
                Preference preference = prefProvider.GetPreferenceByProfIdAndCourseId(profId, courseId);
                if (preference != null) {
                    prefProvider.DeletePreference(preference);
                    return View("Deleted");
                }
                return this.RedirectToAction(c => c.Show(prof));
            } catch (Exception err) {
                if (err.InnerException != null &&
                    err.InnerException.Message.Contains(
                        "The DELETE statement conflicted with the REFERENCE constraint")) {
                            ViewData["ErrorMessage"] =
                                "Course could not be deleted.. there are assoiciated data.. cannot delete";
                        } else {
                            ViewData["ErrorMessage"] = "Preference Could not be deleted.. there is a problem";
                        }
                return View("NotDeleted");
            }
        }