我正在尝试创建一个接受名称,执行查找并将记录集吐回到页面的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,但更简单)。我必须遗漏一些简单的东西,但我无法确定它是什么。
答案 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);
}