يتم فقد تركيز عنصر التحكم في عنصر تحكم خادم ويب ASP.NET بعد AutoPostBack


الأعراض


عند ضغط المفتاح TAB في عنصر تحكم خادم ويب ASP.NET، يتم ترحيل صفحة ويب إلى ملقم ويب. بعد اكتمال العملية، لم يتم تعيين التركيز إلى أي عنصر تحكم. تتوقع التركيز لتعيين إلى عنصر التحكم التالي.

السبب


تحدث هذه المشكلة نظراً لتعيين خاصية عنصر التحكم AutoPostBack إلى True.

الحالة


يعتبر هذا السلوك حسب التصميم.

مزيد من المعلومات


إذا تم تعيين الخاصية AutoPostBack إلى True، تحدث إعادة النشر عند الضغط على ENTER أو عندما يفقد عنصر التحكم التركيز بعد أن تم تعديل المحتويات.

لحل هذه المشكلة:
  1. في طريقة عرض HTML للصفحة WebForm1.aspx، استبدال التعليمات البرمجية الموجودة بما يلي:

    .NET تعليمات برمجية visual C #
    <%@ Page Language="C#" AutoEventWireup="false" Codebehind="WebForm1.aspx.cs" Inherits="WebApplication11.WebForm1"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <body>
    <form id="Form1" method="post" runat="server">
    <asp:Label id="Label1" runat="server" style="LEFT: 10px; POSITION: absolute; TOP: 20px">Label</asp:Label>
    <asp:textbox id="TextBox1" runat="server" AutoPostBack="True" style="LEFT: 85px; POSITION: absolute; TOP: 23px"></asp:textbox>
    <asp:Label id="Label2" runat="server" style="LEFT: 11px; POSITION: absolute; TOP: 54px">Label</asp:Label><asp:textbox id="TextBox2" runat="server" AutoPostBack="True" style="LEFT: 85px; POSITION: absolute; TOP: 58px"></asp:textbox>
    <asp:Label id="Label3" runat="server" style="LEFT: 12px; POSITION: absolute; TOP: 95px">Label</asp:Label><asp:textbox id="TextBox3" runat="server" AutoPostBack="True" style="LEFT: 85px; POSITION: absolute; TOP: 96px"></asp:textbox>
    <asp:Button id="Button1" runat="server" Text="Button" style="LEFT: 85px; POSITION: absolute; TOP: 136px"></asp:Button>
    <script language="javascript">
    document.all["<%= Focus %>"].focus();
    if("<%= ControlType %>" == "TextArea")
    document.all["<%= Focus %>"].select();
    </script>
    </form>
    </body>
    </HTML>
    التعليمات البرمجية Visual Basic.NET
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication11.WebForm1"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <body>
    <form id="Form1" method="post" runat="server">
    <asp:Label id="Label1" runat="server" style="LEFT: 10px; POSITION: absolute; TOP: 20px">Label</asp:Label>
    <asp:textbox id="TextBox1" runat="server" AutoPostBack="True" style="LEFT: 85px; POSITION: absolute; TOP: 23px"></asp:textbox>
    <asp:Label id="Label2" runat="server" style="LEFT: 11px; POSITION: absolute; TOP: 54px">Label</asp:Label><asp:textbox id="TextBox2" runat="server" AutoPostBack="True" style="LEFT: 85px; POSITION: absolute; TOP: 58px"></asp:textbox>
    <asp:Label id="Label3" runat="server" style="LEFT: 12px; POSITION: absolute; TOP: 95px">Label</asp:Label><asp:textbox id="TextBox3" runat="server" AutoPostBack="True" style="LEFT: 85px; POSITION: absolute; TOP: 96px"></asp:textbox>
    <asp:Button id="Button1" runat="server" Text="Button" style="LEFT: 85px; POSITION: absolute; TOP: 136px"></asp:Button>
    <script language="javascript">
    document.all["<%= Focus %>"].focus();
    if("<%= ControlType %>" == "TextArea")
    document.all["<%= Focus %>"].select();
    </script>
    </form>
    </body>
    </HTML>
  2. في "مستكشف الحلول"، انقر بالزر الأيمن
    WebForm1.aspx، ثم انقر فوق عرض التعليمات البرمجية.
  3. في فئة التعليمات البرمجية الخلفية، استبدال التعليمات البرمجية الموجودة بما يلي:

    .NET تعليمات برمجية visual C #
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;

    namespace WebApplication22
    {
    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Label Label1;
    protected System.Web.UI.WebControls.TextBox TextBox1;
    protected System.Web.UI.WebControls.Label Label2;
    protected System.Web.UI.WebControls.TextBox TextBox2;
    protected System.Web.UI.WebControls.Label Label3;
    protected System.Web.UI.WebControls.TextBox TextBox3;
    protected System.Web.UI.WebControls.Button Button1;
    protected string Focus;
    protected string ControlType;

    private void Page_Load(object sender, System.EventArgs e)
    {
    Focus = "TextBox1";
    ControlType = "TextArea";
    }

    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    InitializeComponent();
    base.OnInit(e);
    }

    private void InitializeComponent()
    {
    this.TextBox1.TextChanged += new System.EventHandler(this.TextBox1_TextChanged);
    this.TextBox2.TextChanged += new System.EventHandler(this.TextBox2_TextChanged);
    this.TextBox3.TextChanged += new System.EventHandler(this.TextBox3_TextChanged);
    this.Load += new System.EventHandler(this.Page_Load);
    }
    #endregion

    private void TextBox1_TextChanged(object sender, System.EventArgs e)
    {
    Focus = "TextBox2";
    ControlType = "TextArea";
    }

    private void TextBox2_TextChanged(object sender, System.EventArgs e)
    {
    Focus = "TextBox3";
    ControlType = "TextArea";
    }

    private void TextBox3_TextChanged(object sender, System.EventArgs e)
    {
    Focus = "Button1";
    ControlType = "Button";
    }
    }
    }
    التعليمات البرمجية Visual Basic.NET
    Public Class WebForm1
    Inherits System.Web.UI.Page
    Protected WithEvents Label1 As System.Web.UI.WebControls.Label
    Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
    Protected WithEvents Label2 As System.Web.UI.WebControls.Label
    Protected WithEvents TextBox2 As System.Web.UI.WebControls.TextBox
    Protected WithEvents Label3 As System.Web.UI.WebControls.Label
    Protected WithEvents TextBox3 As System.Web.UI.WebControls.TextBox
    Protected WithEvents Button1 As System.Web.UI.WebControls.Button
    Protected Focus As String
    Protected ControlType As String

    #Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
    'CODEGEN: This method call is required by the Web Form Designer
    'Do not modify it using the code editor.
    InitializeComponent()
    End Sub

    #End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Focus = "TextBox1"
    ControlType = "TextArea"
    End Sub
    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    Focus = "TextBox2"
    ControlType = "TextArea"
    End Sub

    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
    Focus = "TextBox3"
    ControlType = "TextArea"
    End Sub

    Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
    Focus = "Button1"
    ControlType = "Button"
    End Sub
    End Class
  4. انقر فوق إنشاء القائمة
    ابدأ لعرض الصفحة WebForm1.aspx في المستعرض.
  5. اكتب النص في مربع النص ومن ثم اضغط المفتاح TAB. يتم تعيين التركيز إلى عنصر التحكم التالي بعد بعد الظهر العملية.

خطوات إعادة إنشاء المشكلة

  1. إنشاء مشروع تطبيق ويب ASP.NET جديد. بشكل افتراضي، يتم إنشاء الصفحة WebForm1.aspx.
  2. في طريقة عرض HTML للصفحة WebForm1.aspx، استبدال التعليمات البرمجية الموجودة مع التعليمات البرمجية التالية:

    .NET تعليمات برمجية visual C #
    <%@ Page Language="C#" AutoEventWireup="false" Codebehind="WebForm1.aspx.cs" Inherits="WebApplication11.WebForm1"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <body>
    <form id="Form1" method="post" runat="server">
    <asp:Label id="Label1" runat="server" style="LEFT: 10px; POSITION: absolute; TOP: 20px">Label</asp:Label>
    <asp:textbox id="TextBox1" runat="server" AutoPostBack="True" style="LEFT: 85px; POSITION: absolute; TOP: 23px"></asp:textbox>
    <asp:Label id="Label2" runat="server" style="LEFT: 11px; POSITION: absolute; TOP: 54px">Label</asp:Label><asp:textbox id="TextBox2" runat="server" AutoPostBack="True" style="LEFT: 85px; POSITION: absolute; TOP: 58px"></asp:textbox>
    <asp:Label id="Label3" runat="server" style="LEFT: 12px; POSITION: absolute; TOP: 95px">Label</asp:Label><asp:textbox id="TextBox3" runat="server" AutoPostBack="True" style="LEFT: 85px; POSITION: absolute; TOP: 96px"></asp:textbox>
    <asp:Button id="Button1" runat="server" Text="Button" style="LEFT: 85px; POSITION: absolute; TOP: 136px"></asp:Button>
    </form>
    </body>
    </HTML>
    التعليمات البرمجية Visual Basic.NET
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication11.WebForm1"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <body>
    <form id="Form1" method="post" runat="server">
    <asp:Label id="Label1" runat="server" style="LEFT: 10px; POSITION: absolute; TOP: 20px">Label</asp:Label>
    <asp:textbox id="TextBox1" runat="server" AutoPostBack="True" style="LEFT: 85px; POSITION: absolute; TOP: 23px"></asp:textbox>
    <asp:Label id="Label2" runat="server" style="LEFT: 11px; POSITION: absolute; TOP: 54px">Label</asp:Label><asp:textbox id="TextBox2" runat="server" AutoPostBack="True" style="LEFT: 85px; POSITION: absolute; TOP: 58px"></asp:textbox>
    <asp:Label id="Label3" runat="server" style="LEFT: 12px; POSITION: absolute; TOP: 95px">Label</asp:Label><asp:textbox id="TextBox3" runat="server" AutoPostBack="True" style="LEFT: 85px; POSITION: absolute; TOP: 96px"></asp:textbox>
    <asp:Button id="Button1" runat="server" Text="Button" style="LEFT: 85px; POSITION: absolute; TOP: 136px"></asp:Button>
    </form>
    </body>
    </HTML>
  3. في القائمة " تصحيح "، انقر فوق
    بدء تشغيل المشروع.

المراجع


للحصول على معلومات إضافية، انقر فوق رقم المقالة التالي لعرضها في "قاعدة معارف Microsoft":
314206 PRB: عناصر تفقد التركيز عند تمكين AutoPostBack وسمارتنافيجيشن
لمزيد من المعلومات، قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب: