我正在尝试填充数据库中的Authorization
项,但是当我尝试运行该程序时,它会给我错误DropDownListFor
。就像方法(从数据库中获取数据并将其放入Object reference not set to an instance
)一样,即使我已经从SelectList
调用并设置它,也没有被调用。
你能告诉我出了什么问题吗?
以下是我正在使用的代码:
从数据库中获取数据:(库存类)(我们在创建数据库时默认存在以下表中的行ID)
Controller
控制器:
private string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\db1.mdf;Integrated Security=True";
[Display(Name = "ModuleData:")]
public string ModuleData
{
get;
set;
}
public string ID
{
get;
set;
}
public string Name
{
get;
set;
}
public IEnumerable<SelectListItem> ListData
{
get;
set;
}
public SelectList GetData()
{
List<SelectListItem> lists = new List<SelectListItem>();
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query = "SELECT [Id], [Name] FROM [Query]";
conn.Open();
using (SqlCommand cmd = new SqlCommand(query, conn))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
ID = reader["Id"].ToString();
Name = reader["Name"].ToString();
lists.Add(new SelectListItem() { Text = Name, Value = ID });
}
}
}
conn.Close();
}
return new SelectList(lists, "Value", "Text");
}
查看(模块):
Inventory repository = new Inventory();
[HttpGet]
public ActionResult Module()
{
repository.ListData = repository.GetData();
return View();
}
[HttpPost]
public ActionResult Module(Inventory inven)
{
// There is a button later on and here I want to get the value of a selected `DropDownListFor`
return View(inven);
}
以上是我正在使用的代码,但是一旦我运行该程序,它就会在@model Project_Name.Inventory
@{
ViewBag.Title = "Inventory";
}
<h2>Inventory</h2>
<br />
@using (Html.BeginForm())
{
<div>
<fieldset>
<legend>Inventory</legend>
<div class="editor-label">
@Html.LabelFor(u => u.ModuleData)
</div>
<div class="editor-field">
@Html.DropDownListFor(u => u.ID, Model.ListData)
</div>
</fieldset>
</div>
}
上给出错误@Html.DropDownListFor(u => u.ID, Model.ListData)
。
这就是我的全部问题。
非常感谢
你的回答非常感谢。
答案 0 :(得分:1)
在您的GET方法中,您使用
分配SelectList
使用的@Html.DropDownList()
repository.ListData = repository.GetData();
然而,在您发布并返回视图时,您不会重新分配SelectList
,因此Model.ListData
为null
。您需要在致电return View(inven);
您还需要在GET方法中返回模型
repository.ListData = repository.GetData();
return View(repository); // change this
答案 1 :(得分:1)
您正在调用GetData
但没有对结果做任何事情。您需要将模型提供给视图,否则它为null:
[HttpGet]
public ActionResult Module()
{
repository.ListData = repository.GetData();
return View(repository);
}