【问题标题】:Can client-side generated controls affect ViewState?客户端生成的控件会影响 ViewState 吗?
【发布时间】:2017-03-14 23:59:33
【问题描述】:

我有一个使用 JavaScript 生成新文本 inputscheckboxesselects 的页面。所以这些控件都没有设置runat="server"

我想知道这些控件是否在 PostBack 上发送到服务器并成为 Viewstate 的一部分,以任何方式对其进行更改。

【问题讨论】:

    标签: asp.net vb.net viewstate


    【解决方案1】:

    简短的回答是是的,通过分配

    在 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 服务器控件(例如 &lt;input runat="server" /&gt;)和 ASP .NET 服务器控件具有可在代码隐藏中直接访问的控件名称,并且 ViewState 会自动维护(除非将 EnableViewState 属性设置为 false)。

    额外的ViewState参考:

    Understanding ASP.NET View State

    相关问题:

    How to viewstate in normal HTML input in asp.net

    Which controls have ViewState maintained?

    viewstate for HTML control

    【讨论】:

    • 如果其中一个控件(asp:TextBox)被js禁用,表单在Postback上发送,会不会影响viewstate?
    • 使用 JS 在客户端禁用控制当然不会影响服务器端部分,只要它具有 name/ID 属性,就可以使用 Request.Form 检索其值(用于 HTML 文字控制)或 controlID.Value(用于 HTML 和 ASP.NET 服务器控件)并可能影响 ViewState
    猜你喜欢
    • 2015-12-04
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多