ASP.NET MVC3应用程序中的简单下拉列表

3

我需要一个简单的下拉列表框在表格中,但是我不想创建像ViewModel这样的东西。 我有两个相关联的模型(表):1:n:

public class Course
{
    public int ID { get; set; }
    public string Name { get; set; }
}

并且

public class Project
{
    public int ID { get; set; }
    public int CourseId { get; set; }
    public int ProjectNo { get; set; }
    public string Name { get; set; }
    public DateTime Deadline { get; set; }
}

在“创建项目”中,我希望有一个下拉列表,其中包含来自课程表(模型)的Id(作为值)和Name(作为文本)。在新项目中将插入所选的CourseId。我该如何尽可能简单地做到这一点?
3个回答

5

你为什么不想使用ViewModel呢?对于这种类型的问题,它们非常有帮助。

如果你不想使用ViewModel,那么你可以在控制器中构建一个特定的类,该类是从两个类中获取所需属性的聚合:

public ActionResult Show(int id)
{
    Course course = repository.GetCourse(id); // whatever your persistence logic is here
    Project project = projectRepository.GetProjectByCourseId(id);
    string CourseName = from c in course where
                            c.ID == project.courseID
                            select c.Name;
    IEnumerable<SelectListItem> selectList = 
    from c in course
    select new SelectListItem
    {
        Selected = (c.ID == project.CourseId),
        Text = c.Name,
        Value = project.CourseId.ToString()
    };
    //add the selectList to your model here.
    return View(); //add the model to your view and return it.
}

如果使用ViewModel,这将更容易实现,因此您可以拥有一个强类型视图。让我向您展示:

public class ProjectCourseViewModel
{
    public SelectList ProjectCourseList {get; private set; }
    public Project Project {get; private set; }
    public Course Course {get; private set; }

    public ProjectCourseViewModel(Project project, Course course)
    {
        ProjectCourseList = GetProjectCourseSelectList(project, course)
        Project = project;
        Course = course;
    }

    private SelectList GetProjectCourseSelectList(Project project, Course course)
    {
        IEnumerable<SelectListItem> selectList = 
        from c in course
        select new SelectListItem
        {
            Selected = (c.ID == project.CourseId),
            Text = c.Name,
            Value = project.CourseId.ToString()
        };
    }

}

然后您的控制器将非常简单:

public ActionResult Show(int id)
{
    Course course = repository.GetCourse(id);
    Project project = projectRepository.GetProjectByCourseId(id);
    ProjectCourseViewModel pcvm = new ProjectCourseViewModel(project, course)
    return View(pcvm); 
}

然后您的视图会接收一个强类型模型,您不必依赖于ViewData,这是一件好事。

注意:我没有编译它,只是写了下来。可能存在编译错误。


2
也许您可以使用以下示例解决它:
在您的控制器中包含一个ViewBag。
{
Viewbag.Course = db.course.ToList();
var project = new project.....
}

在你的视图中使用以下模式:

@Html.DropDownList("CourseId", 
    new SelectList(ViewBag.Course as System.Collections.IEnumerable, 
    "CourseId", "Name", Model.ID))

其中每个字段代表:

•表单字段的名称(CourseId)

•下拉列表的值列表,作为SelectList传递

•应该随表单一起提交的数据值字段

•应在下拉列表中显示的数据文本字段

•所选值,用于在显示表单时设置下拉列表的值

更多信息请参见:http://www.asp.net/mvc/tutorials/mvc-music-store-part-5 敬礼。


2

在控制器中:

 var CourseName = from c in course where
                            c.ID == project.courseID
                            select c.Name;

  SelectList sl = new SelectList(CourseName);

 ViewBag.names= sl;

在视图中:

 @Html.DropDownList("Name", (SelectList)ViewBag.names)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接