尝试从数据库填充DropDownListFor时出错

时间:2015-06-13 11:21:06

标签: c# mysql asp.net-mvc-4

我正在尝试填充数据库中的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)

这就是我的全部问题。

非常感谢

你的回答非常感谢。

2 个答案:

答案 0 :(得分:1)

在您的GET方法中,您使用

分配SelectList使用的@Html.DropDownList()
repository.ListData = repository.GetData();

然而,在您发布并返回视图时,您不会重新分配SelectList,因此Model.ListDatanull。您需要在致电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);
}