我有一个类似的课程:
public class wsvListTagHistoryClass
{
public int TagId { get; set; }
public int GroupId { get; set; }
public string GroupName { get; set; }
public string Entered { get; set; }
public string DHours { get; set; }
public string GPS { get; set; }
}
在我的View Controller中,我像这样填充了这个类:
int TagId = Convert.ToInt32(Request.QueryString["TagId"]);
wsvListTagHistoryCell = new List<wsvListTagHistoryClass>();
try
{
//Create SQL Connection
using (connection = new SqlConnection(connectionString))
{
//Open Connection
connection.Open();
//Run iosShowGroup Stored Procedure
using (SqlCommand command = new SqlCommand("wsvListTagHistory", connection))
{
command.CommandType = CommandType.StoredProcedure;
//Input Parameters
SqlParameter parameter1 = new SqlParameter("@TagId", SqlDbType.Int);
parameter1.Value = TagId;
parameter1.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter1);
//Execute Query
using (SqlDataReader reader = command.ExecuteReader())
{
//Get Group Data
while (reader.Read())
{
//Create New Class Object
wsvListTagHistoryClass item = new wsvListTagHistoryClass();
//Populate Object with Results
item.TagId = (int)reader[0];
item.GroupId = (int)reader[1];
item.GroupName = reader[2].ToString();
item.Entered = reader[3].ToString();
item.DHours = reader[4].ToString();
item.GPS = reader[5].ToString();
//Add Results to List
wsvListTagHistoryCell.Add(item);
}
}
}
}
}
finally
{
//Close Connection
connection.Close();
}
return View(wsvListTagHistoryCell.ToList());
然后尝试像我一样在我的视野中做一个foreach:
@model IEnumerable<WebServiceAPI.Models.wsvListTagHistoryClass>
@{
ViewBag.Title = "Index";
}
@foreach(var item in Model)
{
@Html.DisplayFor(modelItem => item.TagId )
}
<h2>Index</h2>
我没有错误,但我的问题是没有出现任何内容,TagId根本没有出现。我做错了什么?
答案 0 :(得分:1)
您没有传递带有数据的对象。
wsvListTagHistoryClass item = new wsvListTagHistoryClass();
item.TagId = (int)reader[0];
item.GroupId = (int)reader[1];
item.GroupName = reader[2].ToString();
item.Entered = reader[3].ToString();
item.DHours = reader[4].ToString();
item.GPS = reader[5].ToString();
return View(item);
删除wsvListTagHistoryCell.Add(item);
希望这有帮助
答案 1 :(得分:0)
问题在于使用DisplayFor
。此方法扩展了HtmlHelper
类。对于在顶部定义的模型类型,每个视图都有HtmlHelper
。虽然您的代码通过使用
Html.DisplayFor(modelItem => item.TagId);
您告诉View在类型为TagId
的模型上为属性IEnumerable<WebServiceAPI.Models.wsvListTagHistoryClass>
创建一个显示。虽然lambda表达式不会导致模型上的属性(请记住,HtmlHelper
是强类型的模型类型IEnumerable<WebServiceAPI.Models.wsvListTagHistoryClass>
),MVC是&#34; nice&#34;足以不引发错误,但简单不渲染任何东西。
为了解决这个问题,我可以推荐以下选项:
不要在foreach
中迭代模型中的项目,只需使用Html.DisplayFor(x => x)
而不使用foreach
子句。 MVC将迭代这些项目并尝试显示它们。要仅显示TagId
属性,您可以为模型类创建显示模板。有关显示和编辑器模板的概述,请参阅此link。
如果没有可用于显示wsvListTagHistoryClass
的显示布局,您还可以为模型类型wsvListTagHistoryClass
创建部分。保留foreach
语句并为每个项目呈现部分:
@foreach(var item in Model)
{
Html.RenderPartial("PartialTestModel", item);
}
部分代码类似于以下内容:
@model TestWebAppMVC.Models.TestModel
<div>
Tag ID = @Html.DisplayFor(x => x.TagId)
</div>