我正在尝试通过单个数据库调用构建下拉列表。
我的表由一个 Id 列和一个 CompanyName 列组成。我需要向用户显示 CompanyName 并在选择一个时将页面的 Id 设置为 Id。
我已经把一个简单的模型放在一起来存储信息:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace Portal.Models
{
public class CompanyListId
{
public int Id { get; set; }
public string CompanyName { get; set; }
}
public class CompanyListIdDBContext : DbContext
{
public DbSet<CompanyListId> Contacts { get; set; }
}
}
但是我在 View 中遇到 Controller 和 Razor 调用的问题。
我的 Controller :
public void CompanyListIdSearch()
{
using (var dc = new CompanyListIdDBContext())
{
var content = from p in db.Companies
select new { p.CoId, p.CompanyName };
}
}
View 中的 Razor 调用:
<div id="partners" class="linen">
@{Html.DropDownList("CompanyListIdSearch", new SelectList(Model.CompanyName));}
</div>
在 View 顶部抓取模型 @model Portal.Models.CompanyListId
因此,在较高的层次上,我想要做的是有一个 View ,该 View 使用 razor 标签调用 Controller , Controller 使用数据更新模型,然后该数据显示在下拉列表中。我是不是以错误的方式处理这个问题?
我收到这个错误:
The model item passed into the dictionary is of type 'Portal.Models.DashboardContents', but this dictionary requires a model item of type 'Portal.Models.CompanyListId'.
最佳答案
不完全是。您不能像那样调用 DropDownList
中的方法。
首先,将该项目集合放入您的ViewBag
:
using (var dc = new CompanyListIdDBContext())
{
var content = from p in db.Companies
select new { p.CoId, p.CompanyName };
ViewBag.CompaniesList = content
.Select(c => new SelectListItem
{
Text = c.CompanyName,
Value = c.CoId.ToString()
}).ToList();
}
确保在返回 View 之前在操作结果中调用该函数。
最后,只需使用您的模型属性并切换到 DropDownListFor
:
@Html.DropDownListFor(m => m.Id, ViewBag.CompaniesList);
但是更好的方法是不使用 ViewBag
而是使用 View 模型。像这样:
public class CompanyViewModel
{
public int Id { get; set; }
public string CompanyName { get; set; }
public List<SelectListItem> CompaniesList { get; set; }
}
那么你的操作方法应该是这样的:
public ActionResult YourAction()
{
var model = new CompanyViewModel();
using (var dc = new CompanyListIdDBContext())
{
var content = from p in db.Companies
select new { p.CoId, p.CompanyName };
model.CompaniesList = content
.Select(c => new SelectListItem
{
Text = c.CompanyName,
Value = c.CoId.ToString()
}).ToList();
}
return View(model);
}
然后您的 View 将使用新模型:
@model CompanyViewModel
那么您的下拉菜单将是:
@Html.DropDownListFor(m => m.Id, Model.CompaniesList)
关于c# - ASP.NET 使用 MVC 将 linq 查询结果绑定(bind)到 HTML.DropDownList(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19140812/