【发布时间】:2017-07-07 03:03:08
【问题描述】:
我是 ASP.NET MVC 技术的初学者。 在我的视图页面中,我有一个绑定到从控制器传递的数据的 WebGrid。我还想用数据库中的表列表填充下拉列表。我从辅助方法中检索表列表。我正在尝试将列表发送到 ViewBag 并希望填充下拉列表;但无法得到它。只是出现一些语法错误或无法访问列表。
我的控制器类:
[Authorize]
public ActionResult Index(int page = 1, string sort = "FirstName", string sortdir = "asc", string search = "")
{
int pageSize = 10;
int totalRecord = 0;
if (page < 1)
page = 1;
int skip = (page * pageSize) - pageSize;
var data = GetUsers(search, sort, sortdir, skip, pageSize, out totalRecord);
// Get Tables List
ViewBag.TableList = DataFiller.GetTableNames();
ViewBag.TotalRows = totalRecord;
return View(data);
}
查看文件:
@model List<DataStudio.Models.User>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_MemberLayout.cshtml";
<!-- data is used for grid -->
var grid = new WebGrid(canPage: true, rowsPerPage: 10);
grid.Bind(source: Model, rowCount: ViewBag.TotalRows, autoSortAndPage: false);
}
<!-- ERROR LINE -->
@Html.DropDownList("tableName", @ViewBag.TableList, "Select Table")
错误
Error CS1973 'HtmlHelper<List<User>>' has no applicable method named 'DropDownList' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax. 1_Views_Member_Index.cshtml Index.cshtml 82 Active
User 模型不包含任何 List 或任何 DropDownList。下拉列表是一个完全独立的组合框,我想用列表项填充它;它只包含数据库中的表名列表。
我无法了解如何使用 SelectLiteItem 项绑定或填充下拉列表。我用谷歌搜索了很多,但在这种情况下找不到任何例子。我不想在我的模型中添加我的列表。而且,我只想填充表格列表下拉一次。
任何人都可以帮助我并指导我如何实现目标。非常感谢任何帮助。
谢谢
汤姆
更新:
DataFilter.GetTableNames() 方法
public static List<SelectListItem> GetTableNames()
{
List<SelectListItem> tablesList = new List<SelectListItem>();
string sql = "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'";
string conStr = System.Configuration.ConfigurationManager.ConnectionStrings["DMSDbConnectionString"].ToString();
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand com = new SqlCommand(sql, con)) {
con.Open();
using(SqlDataReader sdr = com.ExecuteReader() )
{
while (sdr.Read())
{
tablesList.Add(new SelectListItem
{
Text = sdr["TABLE_NAME"].ToString(),
Value = sdr["TABLE_NAME"].ToString()
});
}
}
/*
SqlDataAdapter da = new SqlDataAdapter(com);
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt = ds.Tables[0];
tablesList = (from DataRow dr in dt.Rows
select new TablesInfo()
{
TableCatalog = dr["TABLE_CATALOG"].ToString(),
TableName = dr["TABLE_NAME"].ToString(),
TableSchema = dr["TABLE_SCHEMA"].ToString(),
TableType = dr["TABLE_TYPE"].ToString(),
}).ToList();
*/
con.Close();
}
}
return tablesList;
}
我还创建了一个类TablesInfo 来填充其中的数据并使用强类型对象。但是,由于找不到填充它的方法,所以使用了SelectListItem。
由于它只包含表格列表,所以我不希望在每次刷新页面时都填充它。
【问题讨论】:
标签: c# asp.net-mvc dropdown populate viewbag