通过asp.net核心剃须刀页面中的提交按钮传递模型数据

时间:2018-08-23 15:19:48

标签: c# asp.net asp.net-core razor-pages

我有一个很小的项目已经开始研究,以学习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();
   }

1 个答案:

答案 0 :(得分:1)

实际上您没有将这些数据存储在内存中。那是你的问题。您的Razor页面会实例化并随每个请求一起处理,这当然意味着您的sampleModel ivar将在下一个请求中统一化。要传递回去,您需要确保所有数据都被回传,这意味着在表单中为每个属性创建输入。

但是,这是反模式。您不仅不应该以这种方式维护状态,而且还可以使您的应用程序易于操作,因为客户端可以修改这些值。如果您只接受以前发布的对象,则可能会引发各种安全问题。

长短不一,重新查询数据。那是最好和最安全的方法。如果您的查询特别复杂,则值得对其进行缓存,但是请记住,从缓存中拉取也要付出一定的代价,特别是如果您做对了,并且使用了Redis或SQL Server等分布式缓存。您必须评估使用缓存实际上是否比简单地进行查询更有效。