2012-03-05 25 views
0

传递一个对象我有一个教师评分系统。当我创建一个关于教师的新评论时,我有一个dropdownlistfor()列表,可供学生选择。我希望该下拉列表在提交时传递课程对象,但是它只是传入null并给我一个错误。我正在使用一个viewbag来显示所有可用的课程。如何使用DropDownListFor

型号:

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; } 




    } 
} 

Ropository:

 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> 

回答

2

你的模型必须满足下列条件

public int CourseId { get; set; } 

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

在你的控制,你必须填写这两个模型物品放在一起,然后在你看来,应该是这样的

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

MVC将自动为您映射并为GET和POST选择必要的项目

+0

IQueryable Select()中的所有内容看起来都不错吗? – TMan 2012-03-05 03:08:44

+0

给我在IList的SelectListItem错误..任何想法为什么?名称空间或类型无法找到它说 – TMan 2012-03-05 03:10:27

+0

是的,你需要改变它填充Model.Courses这就是为什么它给你一个错误 – Raymund 2012-03-05 03:13:33