2016-12-19 19 views
3

У меня есть простая страница ASP-приложения, добавленная в проект SharePoint только для целей презентации, поэтому это страница веб-форм ASP размещена в SharePoint.Viewstate истекает через некоторое время для страницы приложения в SharePoint 2013?

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; 
     } 
    } 
} 

При нажатии кнопки "ADD номера" кнопку и добавление num1 и num2 Textboxes добавляется к res текстовое поле и выбрано значение ListBox показан на этикетке рядом с ним. Это работает безупречно, если для номера введены правильные значения, а элемент выбран в ListBox.

Если страница оставлена ​​(не взаимодействует) в течение 10-15 минут и нажата кнопка «ADD Numbers», то NullReferenceException будет выбрано для list.SelectedItem.Value, а также текстовые поля будут пустыми. Случилось так, что приложение находится в состоянии postBack (Page.IsPostBack - правда), но viewstate не восстанавливается.

Я думаю, что это связано с тем, что ViewState перемещается в распределенный кеш с version 2013, но может кто-то прояснить это для меня и предложит мне самый эффективный способ обойти это без изменения конфигурации AppFabric, поскольку 10-15 минут извращения ViewState не приемлемо.

ответ

0

Поскольку ViewState сохраняется в сеансе пользователя, возможно, что ViewState истекает, если страница не отправлена ​​обратно в сеанс Срок годности.

Вы можете настроить тайм-аута сеанса в файле web.config (Session timeout in ASP.NET):

<sessionState timeout="60" /> 

(где 50 и 60 находятся в нескольких минутах)

Вы также можете проверить, если ваш сеанс истек, используя этот пример кода в методе Page_Load мастер-страницы:

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

Или сохранить авторизованного пользователя и тест, если это нуль:

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