Как передать объект с помощью DropDownListFor - PullRequest
0 голосов
/ 05 марта 2012

У меня есть система рейтинга учителей.Когда мне нужно создать новый комментарий об учителе, у меня есть выпадающий список для () списка классов, доступных ученику на выбор.Я хочу, чтобы этот выпадающий список передавал объект курса при отправке, но вместо этого он просто передает значение NULL и выдает ошибку.Я использую панель просмотра для отображения всех доступных курсов.

Модель:

    public class TeachersRatingsWall
{

    public int ID { get; set; }



    [Range(1, 5, ErrorMessage = "Invalid rating")]
    public Int32 StarRating { get; set; }

    [Required]
    public string PostComment { get; set; }

    public DateTime PostDate { get; set; }

    [Required]
    public string Teacher { get; set; } //?   or public Teacher Teacher { get; set; }

    public Guid PosterID { get; set; }

    public string PosterUserName { get; set; }

    //[Required] 
    public Course Course { get; set; }

    public Guid CourseID { get; set; }




    }
 }

Репозиторий:

     public IQueryable<TeachersRatingsWall> Select()
    {
        return table.Select(x => new TeachersRatingsWall
                                {
                                  ID = x.ID,
                                  StarRating = x.StarRating,
                                  PostComment = x.PostComment,
                                  PostDate = x.PostDate,
                                  Teacher = x.Teacher,
                                  PosterID = x.PosterID,
                                  CourseID = x.CourseID,
                                  Course = new Course {
                                      ID = x.CourseID,
                                      CourseNumber = x.CourseEntity.CourseNumber,
                                      Department = x.CourseEntity.Department,
                                      Description = x.CourseEntity.Description,
                                      Name = x.CourseEntity.Name

                                                        }

                                });

    }

Контроллер:

public ActionResult Create()

{

     ViewBag.allcourses = coursesservice.GetAllCoursesNamesAndNumbers().Select(x => x.Department + " " + x.CourseNumber);

        //-----------------------------------------------------------------------------------------------------------
        return View();
    } 


   [HttpPost]
    public ActionResult Create(TeachersRatingsWall collection)
    {           
        try
        {
            // TODO: Add insert logic here
            collection.PosterID = ((Guid)Membership.GetUser().ProviderUserKey);
            collection.PostDate = System.DateTime.Now;

            teacherratingservice.CreateComment(collection);
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

Просмотр - Create.cshtml

        <div class="editor-label">
        @Html.Label("Course:")
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.Course, new SelectList(ViewBag.allcourses))

    </div>

1 Ответ

2 голосов
/ 05 марта 2012

На вашей модели вам нужны следующие

public int CourseId { get; set; }

и

public IList<SelectListItem> Courses { get; set; }  

На вашем контроллере вы должны заполнить эти два элемента модели вместе, тогда, по вашему мнению, это должно быть что-то вродеэтот

@Html.DropDownListFor(model => model.CourseId, Model.Courses, "")

MVC автоматически отобразит это для вас и выберет необходимые элементы для GET и POST

...