ASP.NET private member-Bereich an Wert verliert postback
Betrachten Sie den folgenden code:
public partial class TeacherControlPanel : System.Web.UI.Page
{
protected string username = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
username = (string)Request.QueryString["username"];
Ice_Web_Portal.BO.Teacher teacher = Ice_Web_Portal.BO.Teacher.GetTeacherByUsername(username);
if (teacher != null)
{
labUsername.Text = username;
labName.Text = teacher.TeacherName;
labTeacherCode.Text = teacher.TeacherCode;
Dept dept = teacher.Department;
if (dept != null)
{
labDepartment.Text = dept.DeptName;
}
}
else
{
//labErrorMessage.Text = "No teacher found";
}
}
protected void btnSendMail_Click(object sender, EventArgs e)
{
Response.Redirect(@"~/Teacher/TeacherComposeMail.aspx?username=mahabub" + username);
}
}
In diesem code, wenn ich sage 'username' als privat, es ist auf null initialisiert, nach dem anschließenden post Rücken.
Warum?
Was ist das Geheimnis?
- Sagen Sie, dass der code funktioniert, wie geschrieben, aber wenn Sie den Benutzernamen ändern, um eine private variable, die es nicht?
- Ist es auf null initialisiert, oder string.Leer?
- es ist null.
- Immer ein Lehrer-Daten durch seine einzigartige Benutzernamen ein. Keine partielle Klasse.
- JMSA - das problem ist wahrscheinlich in den code der macht das postback, das scheint ok. Bitte poste diesen code.
- plz das update angezeigt.
- Kiesel, ja, Sie bekam es.
- Können Sie zeigen Sie uns den code, der nicht funktioniert? Einfach Wechsel in die private sollte keinen Einfluss haben. Es sollte keine Serialisierung Art Dinge in den hintergrund (die möglicherweise erklärt Dinge).
- Fisher, nur machen Sie es private string username = string.Leer;'
- Fisher, keiner meiner Klassen sind Serialisierbar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil ASP.NET zustandslos heißt es nicht halten, es Stand von der post zurück zum postback. Speichern Sie die Benutzer, viewstate, session oder Anwendung zu sehen, es beim postback zum postback.
username = (string)Request.QueryString["username"];
auf jeder Seite zu laden.Jedes mal, wenn Sie einen postback, auch für "einfache" Dinge wie button-click-events, Sie arbeiten mit einem neue Instanz von der page-Klasse. Das ist ASP.Net 101.
Deklarieren Sie das Feld Benutzername ein, die als private oder protected, hat keinen Einfluss auf diese situation. Die nur mit protected/private haben würde, ist die Zugänglichkeit der variable außerhalb der Klasse oder in der geerbten member.
Ich glaube, dies ist wahrscheinlich eine Lebenszyklus-problem.
Wenn Sie navigieren Sie zu dieser Seite für die erste Zeit Benutzer-Namen haben nur dann einen Wert, wenn der query-string für die Anfrage. Also, "/TeacherControlPanel.aspx" wird eine user-name ohne Wert, aber "/TeacherControlPanel.aspx?username=SomeUserName". In diesen Fällen wird das Feld username ist nur ein Wert, wenn man gesetzt ist. Und wenn kein querystring-Parameter gesetzt ist, dann, wenn die Seite verarbeitet die Schaltfläche click-Ereignis wird die Last Feuer, kein query-string set bedeutet, dass Benutzername wird null sein, was bedeutet, dass das click-Ereignis haben nichts zum Anhängen an die redirect-string.
Also die Frage ist, in Ihrer Anwendung, was die navigation Weg ist, sind Sie benutzen, um zu TeacherControlPanel.aspx?