首页 > 解决方案 > 通过 asp.net core razor 页面中的提交按钮传递模型数据

问题描述

我有一个小项目,我已经开始着手学习 ASP.net,特别是剃刀页面。我有一个表单可以将一些数据添加到页面上的列表中。问题是我无法找到一种方法来获取现有模型并简单地重新显示它。我目前的解决方案是简单地重新查询数据,然后附加新数据以显示

ASP表格:

 <form method="post"> 
       <input type="submit" asp-page-handler="AddData" />
 </form>

代码隐藏:

 public class IndexModel : PageModel
  {
    public SampleIndexModel sampleModel;

   public void OnPostAddData()
   {
     sampleModel = new SampleIndexModel();
     AddRandomData();
     UpdateModel();
   }

这适用于不是来自数据库的示例数据。我想避免去数据库中获取内存中已有的数据——所以我的目标是:

   public void OnPostAddData(SampleIndexModel currentData)
   {
     sampleModel = currentData;
     AddRandomData();
     UpdateData();
   }

标签: c#asp.netasp.net-corerazor-pages

解决方案


实际上,您的内存中没有该数据。那是你的问题。您的 Razor 页面会随每个请求进行实例化和处理,这当然意味着您的sampleModelivar 会在下一个请求时进行单元化。要将其传回,您需要确保所有数据都已回传,这意味着在表单中为每个属性创建输入。

但是,这是反模式。您不仅不应该以这种方式维护状态,而且还会打开您的应用程序以进行操作,因为客户端可以修改值。如果您然后像以前一样接受发布的对象,则可以引入各种安全问题。

长话短说,重新查询数据。这是最好和最安全的方法。如果您的查询特别复杂,则可能值得将其缓存,但请记住,从缓存中提取也是有成本的,特别是如果您正在做正确的事情并使用 Redis 或 SQL Server 等分布式缓存. 您必须评估使用缓存是否实际上比简单地进行查询更有效。


推荐阅读