如何在不使视图状态膨胀的情况下以编程方式设置控件的默认属性

时间:2012-10-24 08:34:16

标签: asp.net .net webforms viewstate

我有一个包含许多控件的页面。某些控件属性/值是从数据库加载的。其他人是例如。数字1-31,年份1900-2012等的日期组合框。我想在for循环中填充组合框,但我注意到如果我甚至早在Page_Init那样做,那么所有值都会被输入到观点。我不想在这些控件上禁用viewstate,因为我需要它来隐藏回发时保持值。

实际上,我问的是ASP.NET如何确定控件的默认值 - 如果我在标记中输入值,它不会将值放入viewstate中,我想知道是否有人知道如何通过以编程方式重现?

<小时/> test2.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="test2.aspx.vb" Inherits="test2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="ddlTest" runat="server"></asp:DropDownList>
    </div>
    </form>
</body>
</html>

<小时/> test2.aspx.vb

部分班级考试2     继承页面

Protected Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
    If Request("addvals") IsNot Nothing Then
        For i As Integer = 0 To 1000
            ddlTest.Items.Add(i)
        Next
    End If
End Sub

结束班

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

根据this article(在重复的问题中链接)您可以动态创建控件并在将其添加到控件集合之前对其进行数据绑定。如果您的数据绑定控件不使用过多的项模板(即,如果它是DropDownList而不是GridView),这将是很好的。另一个选项是禁用控件上的ViewState,并确保在ViewState字典中手动保存隐藏控件的状态。

答案 2 :(得分:-1)

在Init阶段添加的值不会持久保存到ViewState(它们会添加到ViewState StateBag中,但不会标记为脏)。

如果要在跟踪ViewState时设置默认属性(例如在加载阶段或之后),则在将控件添加到Page的控制树之前设置它们(如果您不想要它们)要持久化到ViewState。 E.g。

Label label1 = new Label();
label1.Text = "Some text" // Not persisted to ViewState
Page.Controls.Add(label1);

Label label2 = new Label();
Page.Controls.Add(label2);
label2.Text = "Some text" // Persisted to ViewState