我正在开发一个以mvc中的表格格式显示表格数据的视图。
它显示模型不包含GetEnumerator
的定义的错误。
我的观点
@model IEnumerable<TestComponents.Models.testorder>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<table id="myTable">
<tr class="header">
<th style="width:60%;">TEST NAME</th>
<th style="width:40%;">TEST ID</th>
</tr>
@foreach (var items in Model)
{
<tr>
<td>@items.searchtest</td>
<td>@items.searchtestid</td>
</tr>
}
</table>
MY CONTROLLER
public ActionResult test()
{
testorder to = new testorder();
DbHandle dh = new DbHandle();
to.searchtest = dh.searchtes('S', to);
to.searchtestid = dh.searchtesid('S', to);
return View("test", to);
}
我的DBHANDLE模型
public List<string> searchtes(char flag, testorder to)
{
List<string> items = new List<string>();
connection();
SqlCommand cmd = new SqlCommand("SPNAME", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@PstrOperationFlag", flag);
cmd.Parameters.AddWithValue("@Pstrtestname", 'w');
con.Open();
SqlDataAdapter sd = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
sd.Fill(dt);
using (SqlDataReader sdr = cmd.ExecuteReader())
{
while (sdr.Read())
{
items.Add(sdr["testname"].ToString());
}
}
con.Close();
return items;
}
我不知道我哪里出错了,或者为什么它没有从模型中检索到我的观点。
答案 0 :(得分:0)
您的视图正在接受IEnumerable<TestComponents.Models.testorder>
类型,并且在您的控制器中,您将返回TestComponents.Models.testorder
。所以这是一个主要问题。
另一件事: 我可以看到你想在表格中显示searchtest和searchtestid。从你的代码我可以假设你的模型(测试顺序)看起来像下面的
public class testorder
{
public List<string> searchtest { get; set; }
public List<string> searchtestid { get; set; }
}
因此,您可以转换您的模型,如下所示
public class testorder
{
public string searchtest { get; set; }
public string searchtestid { get; set; }
}
然后您的 Datalayer 可以如下:
public List<testorder> searchtes(char flag)
{
List<testorder> items = new List<testorder>;
connection();
SqlCommand cmd = new SqlCommand("SPNAME", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@PstrOperationFlag", flag);
cmd.Parameters.AddWithValue("@Pstrtestname", 'w');
con.Open();
SqlDataAdapter sd = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
sd.Fill(dt);
using (SqlDataReader sdr = cmd.ExecuteReader())
{
testorder to = new testorder();
while (sdr.Read())
{
to = new testorder();
to.searchtest = sdr["testname"].ToString();
to.searchtestid = sdr["testid"].ToString();
items.Add(to);
}
}
con.Close();
return items;
}
最后,您的控制器应该为您的模型呈现如下内容:
public ActionResult test()
{
List<testorder> to = new List<testorder>();
DbHandle dh = new DbHandle();
to = dh.searchtes('S');
return View("test", to);
}
希望,这对你有帮助。
答案 1 :(得分:0)
您的退货模型不是集合,因此您的观点应该是:
我添加了新模型,控制器操作和方法检查下面的代码,它将适合您。
以下是您的代码中的问题,因此我修改并添加到集合集合中: to.searchtest = dh.searchtes('S',to);
我已修改此模型以创建以下模型,因为不需要此列表&lt;字符串&gt; 元素现在:
public partial class ItemModel
{
public virtual List<string> itemId { get; set; }
public virtual List<string> itemName { get; set; }
}
**So your new model should be :**
public partial class ItemModel
{
public virtual string itemId { get; set; }
public virtual string itemName { get; set; }
}
And Your **Controller Action** should be :
public ActionResult test()
{
ItemModel model = new ItemModel();
List<ItemModel> itemList = new List<ItemModel>();
testorder to = new testorder();
DbHandle dh = new DbHandle();
var itemmodel = dh.searchtes('S', to);
//Second way if not work first way
foreach (var itemvalue in itemmodel)
{
model.itemId = itemvalue.itemId;
model.itemName = itemvalue.itemName;
itemList.Add(model);
}
return View("test", itemList);
}
//your method should be
public List<ItemModel> searchtes(char flag, testorder to)
{
List<string> items = new List<string>();
connection();
SqlCommand cmd = new SqlCommand("SPNAME", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@PstrOperationFlag", flag);
cmd.Parameters.AddWithValue("@Pstrtestname", 'w');
con.Open();
SqlDataAdapter sd = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
sd.Fill(dt);
ItemModel item = new ItemModel();
List<ItemModel> itemList = new List<ItemModel>();
//item.itemId.Add(sdr["testId"].ToString());
//item.itemName.Add(sdr["testname"].ToString());
using (SqlDataReader sdr = cmd.ExecuteReader())
{
while (sdr.Read())
{
item.itemId = sdr["testId"].ToString();
item.itemName = sdr["testname"].ToString();
itemList.Add(item);
}
}
con.Close();
return itemList;
}
我们在这里查看页面:
@model IEnumerable<TestComponents.Models.ItemModel>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<table id="myTable">
<tr class="header">
<th style="width:60%;">TEST NAME</th>
<th style="width:40%;">TEST ID</th>
</tr>
@foreach (var items in Model)
{
<tr>
<td>@items.itemId</td>
<td>@items.itemName</td>
</tr>
}
</table>
这肯定会帮助你!!
<强>干杯!! 强>