پیدا کردن کنترل و دسترسی آن از یک صفحه به صفحه دیگر در ASP.Net
شنبه 18 مهر 1394در اینجا قصد داریم با یک مثال نشان دهیم که چگونه یک کنترل در ASP.Net می تواند با استفاده از C# از یک صفحه به صفحه دیگر دسترسی داشته باشد . روش CrossPagePostBack در ASP.Net با کمک از خاصیت PreviousPage شرایط پیدا کردن و دسترسی کنترل از صفحه قبلی به صفحه جاری را فراهم میکند.
در اینجا قصد داریم با یک مثال نشان دهیم که چگونه یک کنترل در ASP.Net می تواند با استفاده از C# از یک صفحه به صفحه دیگر دسترسی داشته باشد . روش CrossPagePostBack در ASP.Net با کمک از خاصیت PreviousPage شرایط پیدا کردن و دسترسی کنترل از صفحه قبلی به صفحه جاری را فراهم میکند.
ساده ترین راهی که به ذهن هر فرد می آید، استفاده از Session متغیرها و ذخیره اشیاء کنترل در Session ، و دسترسی به آن در صفحه دیگر است. اما استفاده کردن Session یک اشکال دارد که در حافظه سرور مانند RAM ذخیره می شود و مستقیما به طور متناسب به تعدادی از کاربران در یک زمان مشخص دسترسی می دهد. برای مثال اگر سایز اشیاء Session ، صد کیلوبایت باشد و هزار کاربر در حال حاضر به سایت دسترسی داشته باشند، کل حجم استفاده شده 100*1000 kb می شود.
در اینجا یک راه بهتر برای انجام چنین مثالی با استفاده از خاصیت CrossPagePostBack در ASP.net پیشنهاد می دهیم که به شما اجازه دسترسی به صفحه قبلی و کنترل آن را می دهد.
دو راه برای استفاده از CrossPagePostBack وجود دارد :
1. با تنظیم کردن خاصیت PostBackUrl از ASP.Net Button , LinkButton و ImageButton .
2. با استفاده از Server.Transfer
به عنوان دیتابیس ما در اینجا از Northwind مایکروسافت استفاده می کنیم .
از اینجا دانلود کنید. Download and install Northwind Database
یک GridView و دو عدد Button به صورت زیر در صفحه اضافه میکنیم . کلید ها برای مسیردهی به صفحات استفاده می شود.
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" Font-Names="Arial" Font-Size="11pt" AlternatingRowStyle-BackColor="#C2D69B" HeaderStyle-BackColor="green"> <Columns> <asp:BoundField ItemStyle-Width="150px" DataField="CustomerID" HeaderText="CustomerID" /> <asp:BoundField ItemStyle-Width="150px" DataField="City" HeaderText="City" /> <asp:BoundField ItemStyle-Width="150px" DataField="Country" HeaderText="Country" /> <asp:BoundField ItemStyle-Width="150px" DataField="PostalCode" HeaderText="PostalCode" /> </Columns> <AlternatingRowStyle BackColor="#C2D69B" /> </asp:GridView> <asp:Button ID="Button1" runat="server" Text="Button1" PostBackUrl = "~/Page2.aspx" /> <asp:Button ID="Button2" runat="server" Text="Button2" OnClick = "Redirect" />
به Namespace های زیر احتیاج دارید .
using System.Data; using System.Configuration; using System.Data.SqlClient;
Grid view را با استفاده از جدول Customer به صورت زیر پر میکنیم .
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.BindGrid(); } } private void BindGrid() { string constr = ConfigurationManager.ConnectionStrings["conString"].ConnectionString; using (SqlConnection con = new SqlConnection(constr)) { using (SqlCommand cmd = new SqlCommand()) { cmd.Connection = con; cmd.CommandText = "select top 10 * from customers"; using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) { DataTable dt = new DataTable(); sda.Fill(dt); GridView1.DataSource = dt; GridView1.DataBind(); } } } }
مسیر دهی به صفحه دیگر با استفاده از CrossPagePostBack
با توجه به اجرای CrossPagePostBack ، کلید 1 زمانی که کلید 2 از متد Server.Transfer استفاده میکند با PostBackUrl تنظیم می شود.
protected void Redirect(object sender, EventArgs e) { Server.Transfer("~/Page2.aspx"); }
در صفحه مقصد، مرجع صفحه قبلی در خاصیت Page.PreviousPage در دسترس است. کنترل در اینجا گریدویو به آسانی می تواند با استفاده از متد FindControl در دسترس باشد.
protected void Page_Load(object sender, EventArgs e) { if (this.Page.PreviousPage != null) { GridView GridView1 = (GridView)this.Page.PreviousPage.FindControl("GridView1"); } }
حالا وقتی که Master Page استفاده می شود، در ابتدا مرجع ContentPlaceHolder مشخص می شود و کنترل گریدویو به آسانی با استفاده از FindControl در دسترس قرار می گیرد .
protected void Page_Load(object sender, EventArgs e) { if (this.Page.PreviousPage != null) { Control ContentPlaceHolder1 = this.Page.PreviousPage.Master.FindControl("ContentPlaceHolder1"); GridView GridView1 = (GridView)ContentPlaceHolder1.FindControl("GridView1"); } }
- ASP.net
- 4k بازدید
- 2 تشکر