我是ASP.NET MVC技術的初學者。 在我的View頁面中,我有一個WebGrid綁定到從Controller傳遞的數據。我還想用數據庫中的表列表填充下拉列表。我從輔助方法中檢索表List。我試圖將列表發送到ViewBag,並希望填充下拉列表;但不能得到它。某些語法錯誤只會到來,或者List無法訪問。ASP.NET MVC通過ViewBag填充DropDown
我的控制器類:
[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
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
用戶模型不包含任何名單,也沒有任何的DropDownList。下拉菜單是一個完全獨立的組合框,我想填寫一個List項目;它只包含數據庫中的表名列表。
我無法得到如何使用SelectLiteItem項目綁定或填充下拉列表。我搜索了很多,但無法用這種方案得到任何例子。我不想用我的模型添加我的列表。而且,我只想填充一次表格下拉列表。
任何人都可以請幫助我,並指導我如何實現目標。任何幫助,高度讚賞。
感謝
湯姆
UPDATE: 的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
。 由於它只包含表格列表,因此我不希望它在每次頁面刷新時都被填充。
謝謝。我將你的解決方案實施爲一個獨立的類,收集所有數據並作爲模型使用。非常感謝。 – Tvd
由於問題被降級,我無法將您的解決方案設置爲答案。 – Tvd