ASP.NET传递模型以查看

时间:2016-02-19 07:46:18

标签: c# asp.net

我有一个类似的课程:

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根本没有出现。我做错了什么?

2 个答案:

答案 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>
相关问题