ASP.net Раскрывающийся список MVC 5

#c# #asp.net-mvc

Вопрос:

Я новичок в MVC.Я использую библиотеку классов в качестве модели, и она считывает данные из базы данных и сохраняет их в коллекции. Вот код из библиотеки классов, который считывает записи из базы данных sql:

 public IListlt;SemesterDetailsgt; Read(User user )  {  string code; string name; int credits;int selfStudy;int modHrsPerWeek;  Listlt;SemesterDetailsgt; q = new Listlt;SemesterDetailsgt;();    using (SqlConnection db = new SqlConnection(AppConnect.Connection))  {  string query = "SELECT moduleCode,moduleName,modCredits,modHrsPerWeek,modHrsLeft FROM [Module] WHERE userName=@userName";  try  {  using (SqlCommand command=new SqlCommand(query,db))  {  if (db.State == ConnectionState.Closed)  {  db.Open();  command.Parameters.AddWithValue("@userName",user.UserName);    SqlDataReader reader = command.ExecuteReader();   while (reader.Read())  {  code = reader.GetString(0);  name = reader.GetString(1);  credits = reader.GetInt32(2);  modHrsPerWeek = reader.GetInt32(3);  selfStudy = reader.GetInt32(4);  SemesterDetails semester = new SemesterDetails(code, name, credits,selfStudy);  q.Add(semester);   }    }  }    }  catch (Exception e)  {   Console.WriteLine(e.Message);  }  return q;  }  

Это называется этим действием контроллера, показанным ниже:

 public ActionResult EditStudyHrs(User user)  {  List lt;SemesterDetails gt;list= dataHandle.Read(user).ToList();  Listlt;stringgt; str = new Listlt;stringgt;();   foreach (var item in list)  {    str.Add(item.ModuleCode);  }  ViewBag.Modules = new SelectList(str, "ModuleCode", "ModuleCode");  return View();  }  

Я хотел бы привязать свойство кода модуля к раскрывающемуся списку в этом представлении:

 lt;div class="form-horizontal"gt;  lt;h4gt;Detailslt;/h4gt;  lt;hr /gt;  @Html.DropDownList("Modules","SelctModuleCode") lt;/divgt;  

Семестр определяет класс:

 public class SemesterDetails : ModuleInfo {   private int numOfSemWeeks;   public int NumOfSemWeeks  {  get { return numOfSemWeeks; }  set { numOfSemWeeks = value; }  }    private DateTime startdate;  public DateTime StartDate  {  get { return startdate; }  set { startdate = value; }  }   private int studyHrsPerweek;   public int StudyHrsPerweek  {  get { return studyHrsPerweek; }  set { studyHrsPerweek = value; }  }  private DateTime endDate;   public DateTime EndDate  {  get { return endDate; }  set { endDate = value; }  }     private int selfStudy;   public int SelfStudy  {  get { return selfStudy; }  set { selfStudy = value; }  }  public SemesterDetails(string code,string name,int credits,int selfStudy)  {  this.ModuleCode = code;  this.ModuleName = name;  this.ModuleCredits = credits;  this.SelfStudy = selfStudy;      }  

Комментарии:

1. Не могли бы вы также опубликовать свой класс с семестровыми данными, пожалуйста?

2. @ спасибо! и посмотреть модель, пожалуйста, тоже

3. Модель представления-это библиотека @model UtilityLibrary. Семестровые данные

Ответ №1:

Попробуй это

Экшен

 using Microsoft.AspNetCore.Mvc.Rendering; .....  public ActionResult EditStudyHrs(User user) {  var list= dataHandle.Read(user).ToList();   ViewBag.Modules = list.Select(i=gt; new SelectListItem { Value=i.ModuleCode, Text = i.ModuleName}).ToList(); var model= new SemesterDetails ();   return View(model); }  

Вид

 @model SemesterDetails  .....  @Html.DropDownListFor(m =gt; m.ModuleCode,@ViewBag.Modules, "Select Module")  

или новый синтаксис

 lt;select class="form-control" asp-for="@Model.ModuleCode" asp-items="@ViewBag.Modules"gt;lt;/selectgt;    

Комментарии:

1. Я получаю эту ошибку: «HtmlHelperlt;SemesterDetailsgt;» не содержит определения для «выпадающего списка» и лучшей перегрузки метода расширения » SelectExtensions. Раскрывающийся список дляlt;tModel, TPropertygt;(HtmlHelperlt;tModel, TPropertygt;lt;tModelgt;, Выражениеlt;tModelgt;lt;Функцияlt;tModel, TPropertygt;lt;tModel, TPropertygt;gt;, IEnumerablelt;tModel, TPropertygt;gt;lt;SelectListItemgt;, объект)’ требуется приемник типа ‘HtmlHelperlt;SelectListItemgt;lt;tModelgt;’