我有一个很小的项目已经开始研究,以学习ASP.net,尤其是剃须刀页面。我有一个表单,可以向页面上的列表中添加一些数据。问题是我无法找到采用现有模型并简单地重新显示它的方法。我当前的解决方案是简单地重新查询数据,然后将新数据附加到显示中
ASP表格:
<form method="post">
<input type="submit" asp-page-handler="AddData" />
</form>
CodeBehind:
public class IndexModel : PageModel
{
public SampleIndexModel sampleModel;
public void OnPostAddData()
{
sampleModel = new SampleIndexModel();
AddRandomData();
UpdateModel();
}
这对于不是来自数据库的示例数据很好用。我想避免去数据库中获取我已经在内存中的数据-所以我的目标是:
public void OnPostAddData(SampleIndexModel currentData)
{
sampleModel = currentData;
AddRandomData();
UpdateData();
}
答案 0 :(得分:1)
实际上您没有将这些数据存储在内存中。那是你的问题。您的Razor页面会实例化并随每个请求一起处理,这当然意味着您的sampleModel
ivar将在下一个请求中统一化。要传递回去,您需要确保所有数据都被回传,这意味着在表单中为每个属性创建输入。
但是,这是反模式。您不仅不应该以这种方式维护状态,而且还可以使您的应用程序易于操作,因为客户端可以修改这些值。如果您只接受以前发布的对象,则可能会引发各种安全问题。
长短不一,重新查询数据。那是最好和最安全的方法。如果您的查询特别复杂,则值得对其进行缓存,但是请记住,从缓存中拉取也要付出一定的代价,特别是如果您做对了,并且使用了Redis或SQL Server等分布式缓存。您必须评估使用缓存实际上是否比简单地进行查询更有效。