c# - 通过 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();
}
解决方案
实际上,您的内存中没有该数据。那是你的问题。您的 Razor 页面会随每个请求进行实例化和处理,这当然意味着您的sampleModel
ivar 会在下一个请求时进行单元化。要将其传回,您需要确保所有数据都已回传,这意味着在表单中为每个属性创建输入。
但是,这是反模式。您不仅不应该以这种方式维护状态,而且还会打开您的应用程序以进行操作,因为客户端可以修改值。如果您然后像以前一样接受发布的对象,则可以引入各种安全问题。
长话短说,重新查询数据。这是最好和最安全的方法。如果您的查询特别复杂,则可能值得将其缓存,但请记住,从缓存中提取也是有成本的,特别是如果您正在做正确的事情并使用 Redis 或 SQL Server 等分布式缓存. 您必须评估使用缓存是否实际上比简单地进行查询更有效。
推荐阅读
- reactjs - 在 React 上翻译 i18next 找不到密钥
- elixir - 如果在 elixir 中有调用多个 api 并返回错误列表的好方法是什么?
- git - Visual Code Studio 中的版本控制隐藏/删除了我硬盘上的本地文件
- python - 使用 dict 代替 class
- python - 当敌人被杀死时,Explosions Sprite Despears Way to Fast 如何解决这个问题?
- c++ - 是否可以创建一个从不同类调用函数的线程?
- python - Pygame 中的曲线
- docker - 命令适用于 heroku 命令行,但不适用于推送的 docker 映像
- c++ - 如何在另一个函数中使用返回值作为参数?
- javascript - 如何在 getDerivedStateFromProps 中使用 setInterval