我从ms访问数据库(Product table)获取数据(3个变量)并在aspx页面上显示它。我设法只显示第一行数据。似乎问题出现在foreach循环中的aspx页面代码中。我无法理解我的想法。
这是ProductController类:
public ActionResult Index()
{
string str = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\vindom\\Desktop\\DB2.accdb";
// connection string from database Properties
OleDbConnection con = new OleDbConnection(str);
OleDbCommand cmd;
OleDbDataReader reader;
con.Open();
{
cmd = new OleDbCommand("SELECT * FROM product", con);
reader = cmd.ExecuteReader();
while(reader.Read())
{
ViewData["Prod_Type"] = reader.GetValue(0);
ViewData["Prod_N"] = reader.GetValue(1);
ViewData["Prod_d"] = reader.GetValue(2);
}
con.Close();
return View();
}
}
这是aspx代码:
<table>
<tr>
<th>Product Type</th>
<th>Product Number</th>
<th>Product Details</th>
<th></th>
</tr>
<%@foreach (var item in View)
{%>
<tr>
<td><%= Html.Encode(ViewData["Prod_Type"]) %></td>
<td><%= Html.Encode(ViewData["Prod_N"]) %></td>
<td><%= Html.Encode(ViewData["Prod_d"]) %></td>
</tr>
<%}%>
</table>
..和Product.cs
namespace Tok.Models
{
public class Product
{
public string Product_Type { get; set; }
public string Product_NUM { get; set; }
public string Product_desc { get; set; }
public ICollection<Process> Processes;
}
public class Process
{
public string ProcessId { get; set; }
public string Process_desc { get; set; }
public string Next_processs { get; set; }
public virtual Product Product { get; set; }
}
}
答案 0 :(得分:2)
尝试以下方法。 这将遍历您的记录集,但您在视图中的内容将无法正常工作。您需要以某种形式的集合存储行,ViewData [“Prod_XXX”]用于单个数据实例,而不是多行。
你可以建立一个这样的行列表:
List<Prod> prodRows = new List<Prod>();
while (reader.Read())
{
prodRows.Add(new Prod
{
Prod_Type = reader.GetValue(0),
Prod_N = reader.GetValue(1),
Prod_d = reader.GetValue(2)
});
}
其中Prod是这样定义的类:
public class Prod
{
public string Prod_Type { get; set; }
public string Prod_N { get; set; }
public string Prod_d { get; set; }
}
然后在你的视图中你可以有这样的东西:
@model List<Prod>
@foreach(var row in Model)
{
//Your display HTML
}
这不是一个确切的答案,但我希望它有所帮助。
答案 1 :(得分:0)
您的问题是,从外观上看,您正在执行此代码:
ViewData["Prod_Type"] = reader.GetValue(0);
ViewData["Prod_N"] = reader.GetValue(1);
ViewData["Prod_d"] = reader.GetValue(2);
...三次,但每次都覆盖上一组值。
您似乎也没有将模型传递给您的视图。由于您想要遍历数据列表,您需要定义一个类来表示模型记录(可能是Product
或类似的东西),并将您的Product
记录集合传递给您的视图建了。
这样的事情(假设你有一个Product
类):
List<Product> model = new List<Product>();
while(reader.Read())
{
Product newEntry = new Product() {
Prod_Type = reader.GetValue(0), // I'm ignoring the need to cast the values
Prod_N = reader.GetValue(1),
Prod_d = reader.GetValue(2)
};
model.Add(newEntry);
}
// housekeeping
return View(model);