如何使用实体框架或 MVC 项目绑定 HTML 选择元素?

Posted

技术标签:

【中文标题】如何使用实体框架或 MVC 项目绑定 HTML 选择元素?【英文标题】:How to bind HTML select element using either entity framework or MVC project? 【发布时间】:2021-12-22 19:19:47 【问题描述】:

我当前的项目是基于 MVC 的。我一直试图从我的 SQL Server 数据库表中填充一个选择元素。控制器正在接收DataTable 对象中的数据库数据。此数据需要在页面加载时绑定到 html 选择元素。

感谢您对此提供任何帮助。

控制器代码GET方法动作

 // GET: SearchPopulate
 [HttpGet]
 public ActionResult SearchHome()
 
        SearchPopulateMaster empPopulate = new SearchPopulateMaster();
        empPopulate.emp = PopulateEmps();
        return View();
 

 private static List<SelectListItem> PopulateEmps() 
 
        List<SelectListItem> items = new List<SelectListItem>();
        DataTable localdt = new DataTable();
        localdt = DALAcess.getDataFromSql("SELECT id,AgentName from [atmcolle_COMM_U88].[dbo].ATM_M_empMaster");
        return items;
 

查看代码.cshtml文件

<form asp-controller="SearchHome" asp-action="SearchHome">
    <!--Non-hardcoded retrieved from database-->
    <select name="selEmp" id="selEmp">
        <option>Please select one</option>
    </select>

    <input type="submit" />
    <!--Non-hardcoded retrieved from database-->
</form>

【问题讨论】:

您能否分享您的代码 sn-p 以便它可以重现? 能否请您看一下更新后的答案。 在此行第 24 行投射错误:ViewBag.SearchPopulateMaster = new SelectList((IEnumerable)empPopulate, "Id", "AgentName") 尝试将您的dataTable 正确转换为列表。你可以have a look here顺便问一下你用的是实体框架吗? 为什么不直接使用entityframeworkAdo.net 获取您的列表,我认为这里不需要datatable。您可以直接使用您的 dbContext 类来获取代理列表 【参考方案1】:

您似乎正在尝试将您的Data 绑定到HTML dropdown (HTML Select Tag),而HTML dropdown (HTML Select Tag) 将使用您数据库中的entity framework

您可以尝试以下步骤:

Model:

假设我有这样的模型:

public class Agent
    
        [Key]
        public int Id  get; set; 
        public string AgentName  get; set; 
    

Controller:

    public ActionResult BindHtmlSelectElement()
    
        //Bind Dropdown
        List<Agent> agent = PopulateEmps();
        ViewBag.Agent = new SelectList(agent, "Id", "AgentName");
        return View();
    

View:

   @model MVCApps.Models.Agent
    @
        ViewData["Title"] = "BindHtmlSelectElement";
    
    
    <h4><strong>BindHtmlSelectElement</strong> </h4>
    <hr />
    <div class="form-group">
        <label  class="control-label col-md-2">Agent</label>
        <div class="col-md-10">
            <select asp-items="ViewBag.Agent" value=""  class="form-control" asp-for="Id"></select>
        </div>
    </div>

Output:

注意:在您的 PopulateEmps 方法中返回您的代理列表。并注意约定,我将 id 设为Id 时要小心,同时替换它以消除任何错误。

Update: 您也可以尝试访问您的Agent 查询,如下所示

public List<Agent> QueryBuilder()
        
            using (var connection = new SqlConnection("Server=ServerName;Database=YouDatabaseName;Trusted_Connection=True;MultipleActiveResultSets=true"))
            

                List<Agent> viewModeList = new List<Agent>();
                await connection.OpenAsync();
                var command = connection.CreateCommand();
                command.CommandText = "SELECT id,AgentName from [atmcolle_COMM_U88].[dbo].ATM_M_empMaster";
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                
                    Agent viewModel = new Agent();
                    viewModel.Id= reader["id"].ToString(); // Remember to convert property in correct format
                    viewModel.AgentName = reader["AgentName"].ToString();
                    viewModeList.Add(viewModel);

                
                reader.Close();
                command.Dispose();
                connection.Close();
                return viewModeList;
            

        

Update The Controller Like Below:

public ActionResult BindHtmlSelectElement()
    
        //Bind Dropdown
        List<Agent> agent = QueryBuilder();
        ViewBag.Agent = new SelectList(agent, "Id", "AgentName");
        return View();
    

希望以上步骤能够相应地指导您实现目标。

【讨论】:

列表 studentType = _context.studentTypes.ToList();这里的 _context 是什么? 哦,实际上我已经在你的代码之前开始工作了,所以 _context 是我的 entityframeowrk db connect 等等,我正在根据你的情况进行更新。

以上是关于如何使用实体框架或 MVC 项目绑定 HTML 选择元素?的主要内容,如果未能解决你的问题,请参考以下文章

使用实体框架6的mvc4中的单个或多个DbContext文件

微软实体框架

如何在我的实体框架和 ASP.NET MVC 项目中重构 connectionString?

在 ASP.NET MVC 项目中无法使用实体框架连接到 Oracle 数据库

ASP.NET MVC 5 实体框架替代方案或在运行时指定架构的能力?

MVC 4 后期绑定的 DataContext 实体 LINQ 参考