如何将DataReader/DataTable传递给视图
本文关键字:视图 DataTable DataReader | 更新日期: 2023-09-27 18:24:55
我是MVC的新手,正在尝试编写一个简单的MVC 3应用程序,该应用程序读取模型中类内的客户数据,并使用控制器将其返回到视图。读取器显示它有行,但当加载到表并作为模型传递到视图时,它为null。我需要一个简单的解决方案来传递DataTable
到视图或DataReader
到视图,在那里我可以转换为DataTable
。
这是代码:
namespace MvcApplication3.Models
{
public class Customer
{
public DataTable GetCustomers(OdbcDataReader rds)
{
String ConString = "DSN=Northwind;Uid=;Pwd=;";
String SQL = "SELECT * FROM CUSTOMERS";
DataTable tbl = new DataTable();
using (OdbcConnection con = new OdbcConnection(ConString))
{
con.Open();
OdbcCommand cmd = new OdbcCommand(SQL, con);
rds = cmd.ExecuteReader();
}
}
}
}
namespace MvcApplication3.Controllers
{
public class DefaultController : Controller
{
//
// GET: /Default1/
public ActionResult Index()
{
Customer cs = new Customer();
OdbcDataReader rd = new OdbcDataReader();
cs.GetCustomers(rd);
DataTable tb = new DataTable();
tb.Load(rd);
return View(tb);
}
}
}
对于控制器:
public ActionResult Index()
{
DataTable dt = GetData();
return View(dt);
}
然后在视图中:
@model System.Data.DataTable
@using System.Data;
。。。。。。。。。。。。。。…….
<table class="table table-hover">
<thead>
<tr>
@foreach (DataColumn col in Model.Columns)
{
<th>@col.ColumnName</th>
}
</tr>
</thead>
<tbody>
@foreach (DataRow row in Model.Rows)
{
<tr>
@foreach (DataColumn col in Model.Columns)
{
<td>@row[col.ColumnName]</td>
}
</tr>
}
</tbody>
</table>
mvc中的视图总是与强类型模型相关联。。所以在你的情况下。。只需创建一个带有列表的类。。在获取数据时,将该数据插入到列表中,并将该类传递到视图中。。
class A {
public string name{get;set;}
public int age{get;set;}
}
//code when fetching data
//this list should be in the class where you fetch the data
Public list<A> list=new list<A>();
while(datareader.read)
{
A Aobj=new A();
String name=reader['name'].tostring();
int age =Convert.ToInt(reader['age']);
A.name=name;
A.age=age;
list.add(A);
}//end of while loop
//action resut
public ViewResult yourview(){
Return View(list);
}
//now you can access the data from the view.
By....
@model IEnumerable<A>
//here A is your class name
@foreach(var data in Model){
<div>@data.age</div>
}
抱歉代码格式。。。从移动发布
不要将DataReader
传递到视图中-首先将其转换为断开连接的对象/模型。
如果您正在使用Razor,请将其添加到.cshtml页面的顶部,告诉它需要什么类型的模型:
@model System.Data.DataTable
1.将数据表传递到视图中。
public ActionResult my()
{
con.Open();
SqlCommand cmd = new SqlCommand("select * from table",con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
return View(dt);
}
2.接受视图中的数据表
@model System.Data.DataTable
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>my</title>
</head>
<body>
<div>
No of rows= @Model.Rows.Count
</div>
</body>
</html>
试试看:)(y)
将其复制粘贴到您的视图中,您需要的一件事是显示预期的详细信息,如基于索引;
@using System.Data;
@model DataTable
<h2>Report</h2>
<table>
<thead>
<tr>
<th>@Model.ColumnName[1]</th>
</tr>
</thead>
<tbody>
@foreach (DataRow row in Model.Rows)
{
<tr>
<td>@row[1]</td>
</tr>
}
</tbody>
</table>