【发布时间】:2017-03-14 23:59:33
【问题描述】:
我有一个使用 JavaScript 生成新文本 inputs、checkboxes、selects 的页面。所以这些控件都没有设置runat="server"。
我想知道这些控件是否在 PostBack 上发送到服务器并成为 Viewstate 的一部分,以任何方式对其进行更改。
【问题讨论】:
我有一个使用 JavaScript 生成新文本 inputs、checkboxes、selects 的页面。所以这些控件都没有设置runat="server"。
我想知道这些控件是否在 PostBack 上发送到服务器并成为 Viewstate 的一部分,以任何方式对其进行更改。
【问题讨论】:
简短的回答是是的,通过分配。
在 ASPX 页面中动态生成的纯 HTML 元素将被视为 LiteralControl 元素而不是 WebControl 元素,因此它们不会像某些 ASP .NET 服务器控件那样直接影响 ViewState。然而,由于它们被放置在form 标签内(通常带有runat="server" 属性),它们的值作为提交表单触发的回发事件阶段一起发布,在Request.Form 集合中标识为键值对( key 由文字 HTML 元素的 name 属性识别)。
假设你有这样的 JS 动态生成文本框:
<input name="FirstName" type="text" />
然后你可以使用Request.Form检索它的值:
If Not String.IsNullOrEmpty(Request.Form("FirstName")) Then
Dim firstName As String = Request.Form("FirstName")
而且,重要的是,您可以省略上面的字符串赋值,并将文字文本框值赋给ViewState:
ViewState("FirstName") = Request.Form("FirstName").ToString()
请注意,只有 HTML 服务器控件(例如 <input runat="server" />)和 ASP .NET 服务器控件具有可在代码隐藏中直接访问的控件名称,并且 ViewState 会自动维护(除非将 EnableViewState 属性设置为 false)。
额外的ViewState参考:
Understanding ASP.NET View State
相关问题:
How to viewstate in normal HTML input in asp.net
【讨论】:
Request.Form 检索其值(用于 HTML 文字控制)或 controlID.Value(用于 HTML 和 ASP.NET 服务器控件)并可能影响 ViewState。