2009-07-02 30 views
7

Tôi cần chuyển dữ liệu đến một biến trong trang cái của mình mỗi khi trang được tải.Đặt giá trị bất động sản trên trang chính từ trang nội dung

Tôi có một chuỗi [] của RequiredRoles mà tôi đặt trên mỗi trang nội dung xác định vai trò nào được yêu cầu để truy cập trang đó.

Trên trang chính của tôi, tôi có một phương thức lấy mảng này và kiểm tra xem người dùng hiện tại có thuộc một hoặc nhiều vai trò đó hay không.

Tôi làm cách nào để quản lý việc này? Về cơ bản, tôi muốn mỗi trang có một String [] RequiredRoles được xác định và trang chính sẽ tải điều này trên mỗi cuộc gọi và kiểm tra xem liệu người dùng có nằm trong các vai trò đó hay không.

Trả lời

10

Tạo một tài sản trong trang chủ của bạn và bạn truy cập nó từ trang nội dung:

trang

Master:

public partial class BasePage : System.Web.UI.MasterPage 
{ 
    private string[] _RequiredRoles = null; 

    public string[] RequiredRoles 
    { 
     get { return _RequiredRoles; } 
     set { _RequiredRoles = value; } 
    } 
} 

Content Page:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load() 
    { 
     Master.RequiredRoles = new string[] { /*set appropriate roles*/ }; 
    } 
} 
14

định kiểu Page.Master trang chủ của bạn để bạn có đang làm một cái gì đó như:

((MyMasterPageType)Page.Master).Roles = "blah blah"; 
+1

cảm ơn. chỉ có cách tiếp cận này làm việc cho tôi. – n3verLieMe

+0

MyMasterPageType là gì? – Niloofar

+1

@Niloofar: Khi bạn tạo trang cái, nó tạo một lớp mới. Trong ví dụ của tôi, bạn sẽ thay thế 'MyMasterPageType' bằng tên của lớp trang chủ thực sự của bạn. – NotMe

4

Tôi muốn đi bằng cách tạo ra một lớp cơ sở cho tất cả các trang nội dung, một cái gì đó như:

public abstract class BasePage : Page 
{ 
    protected abstract string[] RequiredRoles { get; } 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     // display the required roles in a master page 
     if (this.Master != null) { 
      // value-assignment 
     } 

    } 
} 

Và sau đó tôi làm cho mỗi trang được thừa hưởng từ BasePage, và mỗi việc xác định một RequiredRoles

public partial class _Default : BasePage 
{ 
    protected override string[] RequiredRoles 
    { 
     get { return new[] { "Admin", "Moderator" }; } 
    } 
} 

Điều này có lợi thế của sự sạch sẽ và DRY-ing mã xử lý OnLoad. Và mỗi trang thừa hưởng từ BasePage được yêu cầu để xác định một "RequiredRoles" hoặc nếu không nó sẽ không biên dịch. Chỉ thị

+0

Điều này đã không được upvoted đủ. Đó là cách tiếp cận đúng về xử lý yêu cầu ngay cả khi nó khác với vấn đề chính xác mà OP đang cố giải quyết. – NotMe

24

Thêm trang này sang trang con của bạn:

<%@ MasterType VirtualPath="~/MasterPage.master" %> 

Sau đó thêm tài sản để trang chủ của bạn:

public string Section { get; set; } 

Bạn có thể truy cập vào tài sản này như thế này:

Master.Section = "blog"; 
0

CType (Master.FindControl ("lblName"), Nhãn) .Text = txtId.Text CType (Master.Fi ndControl ("pnlLoginned"), Panel) .Visible = True

Các vấn đề liên quan