我是MVC的新手并尝试编写一个简单的MVC 3应用程序,该应用程序在模型中的类中读取客户数据并使用控制器将其返回到视图。 Reader显示它有行但是当加载到表并传递给视图作为模型时,它为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);
}
}
}
答案 0 :(得分:6)
mvc中的视图总是与强类型模型相关联,所以在你的情况下是..所以..只需要创建一个带有list的类。当获取数据时,将数据插入到列表中并将该类传递给视图..
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>
}
很抱歉代码格式...从手机发布
答案 1 :(得分:4)
不要将DataReader
传递到视图中 - 首先将其转换为断开连接的对象/模型。
如果您使用的是Razor,请将其添加到.cshtml页面的顶部,告诉它需要什么类型的模型:
@model System.Data.DataTable
答案 2 :(得分:4)
为控制器:
@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>
.................. .............. ........
<html>
<body>
<h3>Hi ${user.login}, welcome to the Chipping Sodbury On-the-Hill message boards!</h3>
<img src="fond-bleu.jpg">
<div>
Your email address is <a href="mailto:${user.emailAddress}">${user.emailAddress}</a>.
</div>
</body>
</html>
答案 3 :(得分:3)
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)
答案 4 :(得分:0)
**Copy paste as it is to your view**
@model System.Data.DataTable
@using System.Data;
<h2>Report</h2>
<table>
<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>
答案 5 :(得分:0)
在您的视图中复制粘贴,并根据索引显示您希望显示的预期细节;
@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>