如何使用实体框架或 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顺便问一下你用的是实体框架吗?
为什么不直接使用entityframework
或Ado.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();
希望以上步骤能够相应地指导您实现目标。
【讨论】:
列表_context
是我的 entityframeowrk db connect
等等,我正在根据你的情况进行更新。以上是关于如何使用实体框架或 MVC 项目绑定 HTML 选择元素?的主要内容,如果未能解决你的问题,请参考以下文章
使用实体框架6的mvc4中的单个或多个DbContext文件
如何在我的实体框架和 ASP.NET MVC 项目中重构 connectionString?
在 ASP.NET MVC 项目中无法使用实体框架连接到 Oracle 数据库