سؤال

أحاول تعيين متغير ViewState عند الضغط على الزر، ولكنه يعمل فقط في المرة الثانية التي أقوم فيها بالنقر فوق الزر.هنا هو الكود الخلفي:

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        lblInfo.InnerText = String.Format("Hello {0} at {1}!", YourName, DateTime.Now.ToLongTimeString());
    }
}

private string YourName
{
    get { return (string)ViewState["YourName"]; }
    set { ViewState["YourName"] = value; }
}


protected void btnSubmit_Click(object sender, EventArgs e)
{
    YourName = txtName.Text;

}

هل هناك شيء أفتقده؟هذا هو جزء النموذج من ملف التصميم، وهو أساسي جدًا تمامًا مثل ملف نقطة الاتصال:

<form id="form1" runat="server">
<div>
Enter your name: <asp:TextBox runat="server" ID="txtName"></asp:TextBox>
<asp:Button runat="server" ID="btnSubmit" Text="OK" onclick="btnSubmit_Click" />
<hr />
<label id="lblInfo" runat="server"></label>
</div>
</form>

ملاحظة: العينة مبسطة للغاية، "استخدم txtName.Text بدلاً من ViewState" ليست الإجابة الصحيحة، فأنا بحاجة إلى أن تكون المعلومات في ViewState.

هل كانت مفيدة؟

المحلول

Page_Load الحرائق من قبل btnSubmit_Click.

إذا كنت تريد أن تفعل شيئًا ما بعد أن يتم استخدام أحداث إعادة النشر الخاصة بك Page_PreRender.

//this will work because YourName has now been set by the click event
protected void Page_PreRender(object sender, EventArgs e)
{
    if (Page.IsPostBack)
        lblInfo.InnerText = String.Format("Hello {0} at {1}!", YourName, DateTime.Now.ToLongTimeString());
}

الترتيب الأساسي يذهب:

  • يتم تشغيل الصفحة الأولية (لا يمكن لـ init الوصول إلى ViewState)
  • تتم قراءة حالة العرض
  • نيران تحميل الصفحة
  • أي أحداث النار
  • نيران العرض المسبق
  • يعرض الصفحة
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top