gpt4 book ai didi

c# - 页面生命周期中的 .net ViewState

转载 作者:行者123 更新时间:2023-11-30 12:36:48 26 4
gpt4 key购买 nike

我有一个包含名为 PhoneInfo.ascx 的控件的页面。 PhoneInfo 是使用 LoadControl() 动态创建的,然后调用 initControl() 函数传入初始化对象以在 PhoneInfo 中设置一些初始文本框值。

然后用户更改这些值并点击页面上的提交按钮,该按钮连接到“submit_click”事件。此事件调用 PhoneInfo 中的 GetPhone() 函数。返回值包含所有新用户输入的值,除了 phoneId 值(存储在 ViewState 中且未被用户编辑)始终返回为 null。

我相信 View 状态负责跟踪用户在回传中输入的数据,所以我不明白用户值是如何返回的,而不是明确设置的 ViewState["PhoneId"] 值!如果我在 PhoneInfo 的 page_load 事件中设置 ViewState["PhoneId"] 值,它会在回发后正确检索它,但这不是一个选项,因为我只能在页面准备好提供它时初始化该值。

我确定我只是以某种方式搞乱了页面生命周期,任何建议或问题都会很有帮助!我在下面包含了实际代码的简化版本。

包含页面的代​​码隐藏

protected void Page_Load(object sender, EventArgs e)
{
Phone phone = controlToBind as Phone;
PhoneInfo phoneInfo = (PhoneInfo)LoadControl("phoneInfo.ascx"); //Create phoneInfo control
phoneInfo.InitControl(phone); //use controlToBind to initialize the new control
Controls.Add(phoneInfo);
}
protected void submit_click(object sender, EventArgs e)
{
Phone phone = phoneInfo.GetPhone();
}

PhoneInfo.ascx 代码隐藏

protected void Page_Load(object sender, EventArgs e)
{
}

public void InitControl(Phone phone)
{
if (phone != null)
{
ViewState["PhoneId"] = phone.Id;
txt_areaCode.Text = SafeConvert.ToString(phone.AreaCode);
txt_number.Text = SafeConvert.ToString(phone.Number);
ddl_type.SelectedValue = SafeConvert.ToString((int)phone.Type);
}
}

public Phone GetPhone()
{
Phone phone = new Phone();
if ((int)ViewState["PhoneId"] >= 0)
phone.Id = (int)ViewState["PhoneId"];
phone.AreaCode = SafeConvert.ToInt(txt_areaCode.Text);
phone.Number = SafeConvert.ToInt(txt_number.Text);
phone.Type = (PhoneType)Enum.ToObject(typeof(PhoneType), SafeConvert.ToInt(ddl_type.SelectedValue));
return phone;
}
}

最佳答案

ViewState 在 Init 和 Load 事件之间进行管理。当您关心从回发中维护值时,您应该使用 Page_Init 处理程序中的代码或从 Page_Init 处理程序调用的函数而不是 Page_Load。

有关 ASP.NET 页面生命周期的更多信息,请参阅此链接。

http://msdn.microsoft.com/en-us/library/ms178472.aspx

关于c# - 页面生命周期中的 .net ViewState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2555152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com