【问题标题】:Pass model data through submit button in asp.net core razor page通过 asp.net core razor 页面中的提交按钮传递模型数据
【发布时间】:2019-01-30 00:44:28
【问题描述】:

我有一个小项目,我已经开始着手学习 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.net asp.net-core razor-pages


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢——这很好地回答了我的问题。也感谢您花时间解释它——我在网上阅读的许多其他页面都更有意义。我没有正确地考虑它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 2018-07-01
  • 2018-02-15
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多