【问题标题】:Where does Blazor store form data?Blazor 在哪里存储表单数据?
【发布时间】:2020-06-04 18:54:42
【问题描述】:

有趣的是,Blazor 表单的某些输入元素没有将数据存储在 HTML 中作为输入字段的值(属性)。字段甚至没有值属性!

当我在 chrome 中检查和使用 “存储为全局对象” 功能并在控制台 (temp1.value) 中检查元素的值时,我可以看到该值。

我想知道这个值在浏览器中的存储位置。

【问题讨论】:

  • @schroeder 感谢您的迁移。我刚刚注意到 Stackoverflow 有一个 blazor 的标签。
  • 这些值不存储在浏览器中。 Blazor Forms 的输入元素 是使用 C$ 编写的类组件,并且具有诸如值和存储和检索值的支持字段之类的属性。 Blazor 是否临时使用本地存储可能是可能的,但我从来没有为此烦恼过。
  • @enet,如果我理解正确,您的意思是说数据存储在 wasm 中(C# 最终编译成 web-asm)。但是 html 渲染器不会直接访问 wasm 数据(错误请更正)。那么,要显示数据,它必须存在于 html 中,对吗?实际上,我的兴趣在于这种机制是否可以防止 XSS?
  • 你的 C£ 代码不符合 WebAssembly。只有 mono 运行时符合 WebAssembly,您的 C£ 代码符合 .Net Assemblies。你的问题很有趣..我从来没有打扰自己询问数据的确切存储位置。我可以推测,但不能提出任何有根据的答案。关于 XSS ,您应该将 Blazor 应用程序视为使用 JavaScript,因为 wasm 应用程序使用 JavaScript 使用的相同 UI 线程,并受到相同限制的约束

标签: javascript blazor


【解决方案1】:

attribute 不是通过更改 DOM 的 .value 属性来设置的。

考虑以下最小示例:

<input id=time>
<script>setInterval("time.value = new Date()", 1000);</script>
<input type=button onclick=alert(time.value) value=read>

您可以检查时钟,发现从来没有 value 属性,但输入的 value 属性可以通过脚本设置和获取。

因此,您问题中表单输入的 几乎可以来自任何地方。它很可能嵌入到其他库支持代码的深处,这使得来回传输数据变得容易,但这是我的猜测。它是某种 JS 变量,我们知道的就这么多。主要是在大量使用JS时不需要属性

【讨论】:

    猜你喜欢
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2019-07-31
    • 2015-11-17
    • 2012-04-11
    • 2011-12-14
    • 2020-01-07
    相关资源
    最近更新 更多