我的模型就像这样
namespace CustomerBook.Models
{
public class CustomerModels
{
public string fname { set; get; }
public string lname { set; get; }
public string city { set; get; }
public List<CustomerModels> lst;
public List<CustomerModels> getData()
{
string path = @"somepath\MvcApplication13\\Book1.xlsx";
string excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
OleDbCommand ocmd = new OleDbCommand("select * from [Sheet1$]", excelConnection);
excelConnection.Open();
OleDbDataReader odr = ocmd.ExecuteReader();
lst = new List<CustomerModels>();
CustomerModels modl;
while (odr.Read())
{
modl = new CustomerModels();
modl.fname =valid(odr, 0);
modl.lname = valid(odr, 1);
modl.city = valid(odr, 2);
lst.Add(modl);
}
excelConnection.Close();
return lst;
}
protected string valid(OleDbDataReader myreader, int stval)
{
//if any columns are found null then they are replaced by zero
object val = myreader[stval];
if (object.ReferenceEquals(val, DBNull.Value))
{
return Convert.ToString(0);
}
else
{
return val.ToString();
}
}
}
}
我的控制器是
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CustomerBook.Models;
namespace CustomerBook.Controllers
{
public class LoadCustomerAndDisplayController : Controller
{
//
// GET: /LoadCustomerAndDisplay/
public ActionResult Index()
{
CustomerModels objCustomer = new CustomerModels();
var dataval = objCustomer.getData();
return View(dataval);
}
}
}
生成的视图是
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<CustomerBook.Models.CustomerModels>" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Index</title>
</head>
<body>
<div>
hhiiiiiiiiiiiiii<br />
<%=Model.fname %>
<%=Model.lname %>
<%=Model.city %>
</div>
</body>
</html>
问题在于
<%=Model.fname %>
<%=Model.lname %>
<%=Model.city %>
没有给我任何输出...我通过debuging检查dataval值...它持有值......... 错误是
传递到字典中的模型项的类型为'System.Collections.Generic.List`1 [CustomerBook.Models.CustomerModels]',但此字典需要类型为'CustomerBook.Models.CustomerModels的模型项'。
告诉我哪里错了
答案 0 :(得分:1)
错误信息非常明显。您正在通过控制器操作将List<CustomerModels>
传递给视图,并且您的视图仅强烈输入到单个CustomerModels
。
因此,您可以更改视图的模型类型:
<%@ Page
Language="C#"
Inherits="System.Web.Mvc.ViewPage<List<CustomerBook.Models.CustomerModels>>"
%>
然后能够遍历模型并显示结果:
<table>
<thead>
<tr>
<th>First name</th>
<th>Last name</th>
<th>City</th>
</tr>
</thead>
<tbody>
<% foreach (var item in Model) { %>
<tr>
<td><%: item.fname %></td>
<td><%: item.lname %></td>
<td><%: item.city %></td>
</tr>
<% } %>
</tbody>
</table>
答案 1 :(得分:1)
方法getData()
返回List<CustomerModels>
,而视图需要CustomerBook.Models.CustomerModels
将视图更改为
System.Web.Mvc.ViewPage<System.Collections.Generic.List<CustomerBook.Models.CustomerModels>>
或让getData()
返回CustomerModels
答案 2 :(得分:0)
将IEnumerable
放入
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<CustomerBook.Models.CustomerModels>" %>
像这样:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<IEnumerable<CustomerBook.Models.CustomerModels>>" %>
解决了问题.. !!