JDunkerley đã đúng. Nhưng hãy để tôi giải thích cách tách nó ra bằng cách sử dụng MVP để bạn có thể làm việc hướng tới việc tránh vấn đề thiết kế mà Heiko Hatzfeld đang nói đến.
Về cơ bản, triển khai mẫu MVP cho cả điều khiển của bạn và trang cái của bạn. Xem here để biết hướng dẫn về cách thực hiện điều đó. Khai báo phương thức bạn muốn gọi trong giao diện chính (IMasterView). Tiếp theo tạo một lớp sẽ kiểm soát mối quan hệ giữa hai thành phần; chúng ta sẽ gọi nó là lớp PageController. Đặt một thể hiện của lớp này trong trạng thái yêu cầu cho mỗi yêu cầu bằng cách thêm dòng sau vào global.asax.cs:
/* global.asax.cs */
protected void Application_BeginRequest(object sender, EventArgs e)
{
// ...
HttpContext.Current.Items["Controller"] = new PageController();
// ...
}
Sau đó bạn có thể truy cập vào trường hợp này từ mỗi người thuyết trình (tổng thể và kiểm soát) thông qua dòng mã sau đây:
var controller = HttpContext.Current.Items["Controller"] as PageController;
Sau đó bạn có thể thực hiện một sự kiện hoặc một số cơ chế khác để cho phép điều khiển gọi phương thức trên máy chủ theo cách được tách riêng thông qua đối tượng được chia sẻ này. Ví dụ:
/* PageController.cs */
public event EventHandler SomeEvent;
protected virtual void OnSomeEvent(EventArgs e)
{
Debug.Assert(null != e);
var handler = this.SomeEvent;
if (null != handler)
handler(this, e);
}
public void FireSomeEvent()
{
this.OnSomeEvent(EventArgs.Empty);
}
/* ControlPresenter.cs */
public ControlPresenter(IControlView view)
: base()
{
view.EventFired += (sender, e) =>
{
var controller = HttpContext.Current.Items["Controller"] as PageController;
controller.FireSomeEvent();
};
}
/* MasterPresenter.cs */
public MasterPresenter (IMasterView view)
: base()
{
var controller = HttpContext.Current.Items["Controller"] as PageController;
controller.SomeEvent += (sender, e) => view.MyFunction();
}
Đảm bảo sự kiện "EventFired" được khai báo trong giao diện điều khiển của bạn (IControlView) và được thực hiện trong kiểm soát. Sau đó, tất cả các bạn phải làm để ảnh hưởng đến chủ (gọi phương thức của nó), là cháy sự kiện này và MVP + PageContoller sẽ chăm sóc phần còn lại.
Cheers
Nguồn
2009-09-18 15:42:38
Tôi đã sử dụng cách tiếp cận này và nó hoạt động tốt! Cảm ơn –
Rất vui được trợ giúp! Happy code :-) –