【问题标题】:Simple DropDownList in ASP.NET MVC3 appASP.NET MVC3 应用程序中的简单 DropDownList
【发布时间】:2011-02-26 17:28:25
【问题描述】:

我需要简单的 DropDownList 形式,我不想创建像 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(作为值)和名称(作为文本)的 DropDownList。在新项目中将插入选择的 CourseId。我怎样才能尽可能简单地做到这一点?

【问题讨论】:

    标签: asp.net asp.net-mvc-3


    【解决方案1】:

    您不想使用 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 传递

      •应与表单一起回传的数据值字段

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

      •表单显示时用来设置下拉列表值的Selected Value

      更多信息:http://www.asp.net/mvc/tutorials/mvc-music-store-part-5 brgds。

      【讨论】:

        【解决方案3】:

        在控制器中:

         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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-29
          • 1970-01-01
          • 1970-01-01
          • 2023-03-10
          • 2013-02-14
          • 1970-01-01
          • 2012-02-03
          • 2011-07-19
          相关资源
          最近更新 更多