stringbuilder append 私のレコードを上書き if (!IsPostback)
-
19-09-2019 - |
質問
オーバーライドを回避するにはどうすればよいですか?
public partial class test : System.Web.UI.Page {
StringBuilder sb = new StringBuilder();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
sb.Append("one");
lbl.Text = sb.ToString();
}
}
protected void cmdSb_Click(object sender, EventArgs e)
{
sb.Append("two");
lbl.Text = sb.ToString();
} }
解決
毎回覚えておいてください どれでも ポストバックは、たとえイベントを処理するだけであっても、 満杯 ページのライフサイクルが実行されます。これを理解しやすくするために、コードを次のように、すべてが 1 つの大きな関数であるかのように考えることができます。
public partial class test : System.Web.UI.Page
{
// Page_Load runs for EVERYTHING
protected void Page_Load(object sender, EventArgs e)
{
// -- Constructor Area
StringBuilder sb = new StringBuilder();
// -- Page Init Area
// -- ViewSate is loaded
// -- Page Load Area
if (!IsPostBack)
{
sb.Append("one");
lbl.Text = sb.ToString();
}
// -- Validation controls are checked
// -- If valid, start handling events
// Handle your click event
if (cmdSb_Clicked)
{
sb.Append("two");
lbl.Text = sb.ToString();
}
// -- DataBinding Area
// -- Save ViewState
// -- Render Page: the class is turned into html that is sent to the browser
// -- Unload -- Page is disposed
}
}
もちろん、これは実際に起こることではありませんが、このように考え始めれば、正しい方向に進んでいます。この場合、クリック イベントは決して同時に実行されないことに注意してください。 !IsPostBack
コードを作成しても、毎回新しい StringBuilder を使用することになります。
ページのライフサイクルの詳細については、ここを確認してください。
http://msdn.microsoft.com/en-us/library/ms178472.aspx
他のヒント
ASP.NETを使用すると、ビューステートやセッション状態のようなものにそれを保存しない限り、あなたのStringBuilderのインスタンスがポストバックを通じて持続しないことを意味している、ステートレスです。
所属していません StackOverflow