Ich nicht Threads oder Sitzung beibehalten, jedoch die Variablen definiert sind während eines Postback verloren, weil ein neuer Thread erstellt wird. Gedanken?ASP.NET Postback erstellt einen neuen Thread und eine neue Sitzung
currentthreadid und sessionid ändern sich jedes Mal, wenn auf button1 oder button2 geklickt wird. Ich mache mir mehr Gedanken darüber, dass neue Threads erstellt werden. Hilfe bitte !
hier ist mein WebForm1.aspx Code
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="UpdatePanelTest2.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Before Click" />
<asp:Button ID="Button1" runat="server" Text="Button1" OnClick="Button1_Click" CausesValidation="false"/>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="Button2" runat="server" Text="Button2" OnClick="Button2_Click"/>
</form>
</body>
</html>
hier Code meine WebForm1.aspx.cs
istnamespace UpdatePanelTest2
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string currentthreadid = AppDomain.GetCurrentThreadId().ToString();
string sessionid = Session.SessionID;
if (IsPostBack) { }
if (IsAsync) { }
if (IsPostBackEventControlRegistered) { }
if (ScriptManager1.IsInAsyncPostBack) { }
}
protected void Page_Init(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
this.Label1.Text = "After Click";
}
protected void Button2_Click(object sender, EventArgs e)
{
}
}
}
meine Datei web.config
<?xml version="1.0"?>
<!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 -->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
</configuration>
UPDATE
Der Grund, warum ich es brauchen die gleiche Thread zu sein für Postbacks nennt, weil ich bestimmte Variablen erhalten und dann diese Variablen für den aktuellen Pool Thread wiederverwenden
Code:
private static readonly ThreadLocal<PageContext> _context = new ThreadLocal<PageContext>(typeof(PageContext), "_context", true);
private string[] _path;
public static PageContext ForCurrentThread
{
get { return _context.Value ?? (_context.Value = new PageContext()); }
}
public void Initialize(HttpRequest _request)
{
somestring = null;
}
public string somestring { get; set; }
Wenn die Seite lädt die Beim ersten Mal erhält somestring einen Wert, andere Klassen verwenden denselben Kontext und verwenden diesen somestring-Wert erneut. Dies funktioniert nicht, wenn ein neuer Thread für Postback-Anforderungen erstellt wird.
kann Ihre Frage nicht verstehen.Sie möchten Wert nur einmal speichern? –
Es gibt einen ähnlichen Thread - bitte folgen Sie unten Link. http://stackoverflow.com/questions/222999/how-to-persist-variable-on-postback – meghlashomoy
Welche Variable möchten Sie gleich bleiben? – smoksnes