ASP.NET MVC 4将DB数据传递回视图

时间:2014-02-05 20:30:02

标签: asp.net-mvc asp.net-mvc-4

我正在尝试创建一个接受名称,执行查找并将记录集吐回到页面的View。

模特:

public class User
{
    [Required]
    [DisplayName("ID")]
    public int ID { get; set; }

    [DisplayName("FirstName")]
    public string FirstName { get; set; }

    [DisplayName("LastName")]
    public string LastName { get; set; }

    [DisplayName("FavouriteMovie")]
    public string FavouriteMovie { get; set; }
}

视图:

 @{
     ViewBag.Title = "Index";
}
@model MVCDatabaseFormTest.Models.User


MainForm


@Html.BeginForm();

This is the form
@Html.Label("Enter search for first name:");

@Html.TextBoxFor(model => model.FirstName);

<input type="submit" value="Search" name="FormCollector1.PostBackButton" id="Search" />

<br />

Display a title found:

@Html.LabelFor(m => m.FirstName);<br/>
@Html.LabelFor(m => m.LastName);<br/>
@Html.LabelFor(m => m.FavouriteMovie);<br/>

控制器:

    [HttpPost]
    public ActionResult Index(User user1)
    {
        string connectionString = "Data Source=cl02db01.cluster01.thindata.net; Initial Catalog=dev_backupDatabase_v3;Persist Security Info=True;User ID=ProductionMonitoringDashboard;Password=f3sf3sdf33;MultipleActiveResultSets=True";

        string info = user1.FirstName; // check value

        User u = new User();

        List<User> data = new List<User>();
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
            using (SqlCommand command = new SqlCommand("select id,firstname,lastname,movie from _jterhofstede_TestMVC (nolock) where firstname like '%" + info + "%'", conn))
            {
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    u.ID = reader.GetInt32(0);
                    u.FirstName = reader["FirstName"].ToString();
                    u.LastName = reader["LastName"].ToString();
                    u.FavouriteMovie = reader["movie"].ToString();
                    data.Add(u);

                }
            }


        }

        return View(u);

结果:

代码接受第一个名称,并在db表中查找结果,并通过检查调试器将其成功加载到变量u中,然后将其传递回视图。

但是,视图不显示结果。理想情况下,我想把记录写到页面上(有点像GridView,但更简单)。我必须遗漏一些简单的东西,但我无法确定它是什么。

2 个答案:

答案 0 :(得分:0)

您实际上并未显示返回的数据。您的视图仅包含字段的标签,而不是字段本身。

您需要以下内容:

@Html.LabelFor(m => m.FirstName): @Html.DisplayFor(m => m.FirstName)<br/>

顺便说一句,你不要在大多数演员表中使用分号后的分号(仅在代码块中)

答案 1 :(得分:0)

我认为不是将控制器末端的一个对象返回到视图,而是应该传递整个列表。 所以而不是

return View(u);

你会用

return View(data);

然后在您的视图中,在顶部,接受模型作为列表。 所以而不是

@model MVCDatabaseFormTest.Models.User

使用类似

的内容
@model List<MVCDatabaseFormTest.Models.User>

另外, 您在循环外声明了单个对象,每次将其添加到列表时都重写它。因此,您最终会得到一个具有相同对象的列表 相反,您需要在每个循环中实例化一个新的。 你需要在while循环之外注释掉你的第一个新东西然后 你需要这样的东西:

        while (reader.Read())
        {
           User u = new User();
            u.ID = reader.GetInt32(0);
            u.FirstName = reader["FirstName"].ToString();
            u.LastName = reader["LastName"].ToString();
            u.FavouriteMovie = reader["movie"].ToString();
            data.Add(u);
        }