#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;’