gpt4 book ai didi

asp.net - SharePoint 2013 中应用程序页面的 View 状态会在一段时间后过期吗?

转载 作者:行者123 更新时间:2023-12-01 09:45:05 25 4
gpt4 key购买 nike

我在 SharePoint 项目中添加了一个简单的 ASP 应用程序页面,仅用于演示目的,因此它的 ASP Web 表单页面托管在 SharePoint 中。

HTML:

</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
<asp:Label runat="server">Number 1:</asp:Label>
<asp:TextBox ID="num1" runat="server"></asp:TextBox>
<asp:Label runat="server">Number 2:</asp:Label>
<asp:TextBox ID="num2" runat="server"></asp:TextBox>
<asp:Label runat="server">Result:</asp:Label>
<asp:TextBox ID="res" runat="server"></asp:TextBox>
<asp:Button Text="ADD Numbers" runat="server" OnClick="Unnamed_Click" />
<asp:ListBox runat="server" ID="list" />
<asp:Label runat="server" ID="previousListValue"></asp:Label>
<asp:Label runat="server">Exception:</asp:Label>
<asp:TextBox ID="exception" runat="server"></asp:TextBox>
</asp:Content>

下面是代码:

public partial class Default : LayoutsPageBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
list.DataSource = new List<ListItem>() {
new ListItem("value1", "1"),
new ListItem("value2", "2"),
new ListItem("value3", "3"),
};
list.DataBind();
}
}

protected void Unnamed_Click(object sender, EventArgs e)
{
try
{
res.Text = Convert.ToString(int.Parse(num1.Text) + int.Parse(num2.Text));
previousListValue.Text = "Previous list selected value is: " + list.SelectedItem.Value;
exception.Text = string.Empty;
}
catch (Exception ex)
{

exception.Text = ex.GetType().ToString() + "\t" + ex.Message;
}
}
}

当您单击“添加号码”按钮并添加 num1 时和 num2文本框附加到 res文本框和选定值 ListBox显示在它旁边的标签中。如果为数字输入了正确的值并且在 ListBox 中选择了一个项目,这将完美地工作。 .

如果页面离开(未交互)大约 10-15 分钟并单击“添加号码”按钮,NullReferenceException将被抛出 list.SelectedItem.Value并且文本框也将为空。发生的情况是应用程序处于回发状态(Page.IsPostBack 为真)但 View 状态未恢复。

我想这与自 version 2013 起将 ViewState 移动到分布式缓存有关。但有人可以为我澄清这一点,并建议我最有效的方法来解决这个问题,而不更改 AppFabric 配置,因为 10-15 分钟的 ViewState 变态是 Not Acceptable 。

最佳答案

由于 ViewState 保存在用户的 session 中,因此有可能如果页面未在 session 中回发,ViewState 将过期到期时间。

您可以在 web.config 文件 ( Session timeout in ASP.NET ) 中配置 session 超时:

<sessionState timeout="60"  />

(其中 50 和 60 是分钟)

您还可以使用母版页的 Page_Load 方法中的示例代码检查您的 session 是否过期:

if (Session.Contents.Count == 0)
{
//Session dead!
}
else
{
//Session alive!
}

或者保存登录的用户并测试它是否为空:

if (Session["userId"] == null)
{
//Session dead!
}
else
{
//Session alive!
}

关于asp.net - SharePoint 2013 中应用程序页面的 View 状态会在一段时间后过期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41232640/

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