当我将模型和代码组合在同一个类中时,不会出现此问题,但是现在我已经将模型和代码分成不同的类。我做了2列,每个列都有不同的值(数据)。
当我运行程序时,它将从数据库中检索所有数据,这是我得到的结果:(完全错误)
数据库表(用户):
但是,当我从IDE(Visual Studio 2013)检查数据库时,它显示正确:
以下是我正在使用的代码:
模型(UserContext):
public class UserContext
{
[Display(Name = "Username:")]
public string Username
{
get;
set;
}
}
控制器:
UserManager manager = new UserManager();
public ActionResult List()
{
List<UserContext> user = manager.Fetch();
return View(user);
}
代码背后(UserManager):
public List<UserContext> Fetch()
{
List<UserContext> users = new List<UserContext>();
UserContext context = new UserContext();
using (SqlConnection conn = new SqlConnection(connectionString))
{
string query = "SELECT [Username] FROM [User] ORDER BY [Username] ASC";
conn.Open();
using (SqlCommand cmd = new SqlCommand(query, conn))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
context.Username = reader["Username"].ToString();
users.Add(context);
}
}
}
}
return users;
}
查看(列表视图):
@model List<Project_Name.Models.UserContext>
@{
ViewBag.Title = "User List";
}
<h2>User List</h2>
<br />
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>
Username
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.Label(item.Username)
</td>
</tr>
}
</tbody>
</table>
问题是因为我将UserManager
类放在Models
文件夹之外,将UserContext
放在Models
文件夹中?
非常感谢。
你的回答非常感谢。
答案 0 :(得分:1)
您的第一个问题出在您的UserManager中。您需要为从数据库中读取的每一行创建一个新的UserContext。
移动
UserContext context = new UserContext();
从哪里到
while (reader.Read()) {
答案 1 :(得分:1)
您的错误发生是因为您只声明了context
的一个实例,并且在UserName
循环中不断更新其while
(在while循环中,您只需添加它的另一个引用集合)
您需要在循环中声明一个新实例
while (reader.Read())
{
UserContext context = new UserContext();
context.Username = reader["Username"].ToString();
users.Add(context);
}
答案 2 :(得分:1)
您需要在&#34;每个&#34;中创建新实例。 while循环迭代如下:
while (reader.Read())
{
UserContext context = new UserContext();
.....
.........;
}
答案 3 :(得分:0)
您没有WHERE
条款。你总是最终会选出最后一个人。