【发布时间】:2020-03-18 18:21:42
【问题描述】:
我无法让数据显示在剃刀视图上。我目前正在 DataAccessLayer.GetData() 函数中获取数据并填充我的对象。我的对象列表被填充和存储。但是,我的对象列表计数在剃刀视图上为 0,因此它什么也不显示。我是否在视图上正确“更新”我的对象?这是第一次使用剃须刀页面模板,所以这是一个学习曲线。
剃刀页面:
<form method="post" asp-page-handler="GetData">
<input id="txtSearch" name="search" />
<button class="btn btn-lg btn-dark" id="btnSubmit" name="Submit" />
</form>
@{ List<ObjectsModel> objects = new List<ObjectsModel>();
@foreach (var record in objects)
{
<tr>
<td>
@Html.DisplayFor(modelItem => record.COLUMN1)
</td>
<td>
@Html.DisplayFor(modelItem => record.COLUMN2)
</td>
<td>
@Html.DisplayFor(modelItem => record.COLUMN3)
</td>
</tr>
}
}
页面模型:
public class ObjectsModel : PageModel
{
public string COLUMN1 { get; set; }
public string COLUMN2 { get; set; }
public string COLUMN3 { get; set; }
public void OnGet()
{
}
public void OnPostGetData(string search)
{
List<ObjectsModel> objects = new List<ObjectsModel>();
DataAccessLayer.GetData(search, out objects);
return;
}
}
DataAccessLayer:
public class DataAccessLayer
{
public static bool GetData(string ID, out List<ObjectsModel> objects)
{
string connectionString = "";
objects = new List<ObjectsModel>();
try
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlCommand command = connection.CreateCommand();
command.CommandType = System.Data.CommandType.Text;
command.CommandText = @"SELECT top 50 COLUMN1, COLUMN2, COLUMN3
"FROM Table";
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
ObjectsModel item = new ObjectsModel();
item.COLUMN1 = reader.GetValue(0).ToString().Trim();
item.COLUMN2 = reader.GetValue(1).ToString().Trim();
item.COLUMN3 = reader.GetValue(2).ToString().Trim();
objects.Add(item);
}
reader.Close();
reader = null;
command = null;
connection.Close();
connection = null;
return true;
}
catch (Exception exc)
{
exc.ToString();
return false;
}
}
}
【问题讨论】:
-
“我是否在视图上正确地“更新”了我的对象?看起来不是 - 您正在视图中构建一个全新的列表,这当然是空的。您需要引用您在 PageModel 中构建和添加的列表。
-
所以我引用了 OnPostGetData 处理程序方法。问题是我无法在视图端引用对象列表,因为“它不存在”。如何在不在视图中创建新列表的情况下访问列表?
-
你的代码在很多地方都是错误的,你根本没有向你的视图发送模型,GetData 填充了错误的列表,你已经在你的类中定义了公共列表。看起来您跳过了一些教程...首先尝试在包含数据库之前将 List
发送到您的视图模型 -
@Djuro 我明白你在说什么。让我做一些更改,阅读更多文档,然后我会更新代码!
-
@Djuro 我已经更新了代码。我在模型类中取出了公共列表,现在只是在我的 Data Access.GetDataFunction() 中生成它。列表正在填充中,调试时在查看页面上可以看到计数为 50。但是,当继续通过时,它会变为 0。我知道这是因为我正在视图页面上创建一个新列表。如何在不生成新实例的情况下初始化该列表?
标签: c# asp.net-core razor-pages asp.net-core-3.0