2011-05-04 5 views
0

웹 페이지 (aspx)가 있습니다. 이 페이지는 button, UpdatePanelTimer입니다. 이제 내 문제는 10 명의 사용자가 동시에이 페이지에 있다고 가정하고 사용자 번호 3과 8이 버튼을 클릭하고 모든 사용자의 UpdatePanel이 업데이트되어야한다고 가정 할 때입니다. 이 기능을 구현하는 올바른 방법은 무엇입니까?다른 사용자의 웹 페이지 UpdatePanel

+1

updatepanel은 ajax를 사용하여 클라이언트 브라우저와 통신하기 때문에 개별 브라우저가 다른 브라우저의 상태를 알 수있는 방법이 없습니다. 모든 클라이언트에 변경 사항을 적용하거나 클라이언트가 단지 페이지가 아닌 웹 서비스를 확인하도록 웹 소켓을 사용해야 할 것입니다. – faester

+0

@faester는'단지 한 페이지가 아닌 웹 서비스를 확인하십시오 '라고 설명 할 것입니다. – jams

+0

내 고집 센 것 같지만 ** 믿을 수있다. ** 가능하다. 아래의 코드에서 브레인 스톰을 제공했습니다. –

답변

1

각 사용자는 웹 응용 프로그램의 사본을 실행하므로 한 사용자의 브라우저에서 발생하는 일은 다른 사용자에게 알릴 수 없습니다. 당신이 할 수있는 한가지는 한 사용자가 버튼을 클릭하여 업데이트 할 때 당신이 그것을 저장할 수있는 반면에 모든 사용자 응용 프로그램이 서버에 ping을 수행 할 수있을 때마다 2 초마다 업데이트가 발생했는지 여부를 알 수 있습니다.

+0

모든 인스턴스 (= 세션)를 관리하는 GLOBAL이라는 것이 있습니다. 확실히 그것은 다른 세션들 사이에 어떤 종류의 상호 작용을 생성하는데 사용될 수 있습니까? –

0

전역 속성을 사용할 수 있습니다. 이 속성에서 Observer 패턴을 입력하고 방문자가 구독하도록 할 수 있습니다. 응용 프로그램 속성 (모든 세션에서 공유 됨)을 변경하면 Notify() 메서드를 호출합니다. 클라이언트 Notify() 메서드가 호출되면 UpdatePanel을 업데이트하는 기능을 추가합니다.

이 코드는 테스트되지 않은 상태입니다

, 가이드 라인

// *** GLOBAL.ASAX 
// This collection will contain all the updatepanels that need to be updated 
private List<IUpdatePanelClient> _registeredClients = new List<IUpdatePanelClient>(); 

public static void RegisterClient(IUpdatePanelClient client) 
{ 
    _registeredClients.Add(client); 
} 
public static void UnregisterClient(IUpdatePanelClient client) 
{ 
    _registeredClients.Remove(client); 
} 
// Which client is triggering the update call ? 
private IUpdatePanelClient _clientUpdating = null; 
public static IUpdatePanelClient ClientUpdating 
{ 
    get { return _clientUpdating ; } 
    set { _clientUpdating = value; Notify(); } 
} 
// Notify the clients 
public static void Notify() 
{ 
    foreach(IUpdatePanelClient client in _registeredClients) 
    { 
     client.Update(); 
    } 
} 

// *** IUPdatePanelClient.CS 
interface IUpdatePanelClient // Interface to make the calls 
{ 
    void Update(); 
} 

// *** Your codepage 
public class MyUpdatePanelPage : Page, IUpdatePanelClient // Inherit the interface 
{ 
    public void Page_Load(Object sender, EventArgs e) 
    { 
     MyUpdatePanelPage.Global.RegisterClient(this); 
    } 

    public void Btn_Click(Object sender, EventArgs e) 
    { 
     MyUpdatePanelPage.Global.ClientUpdating = this; 
    } 

    public void Update() 
    { 
     this._updatePanel1.Update(); 
    } 
} 
+0

코드에서 실제로 브레인 스톰입니다. – jams

+0

@jams : 작동하지 않는 이유를 명확히 설명해 주시겠습니까? –

+0

코드에는'Global.asax'에서'page'에'static' 메소드를 액세스하는 것과 같은 많은 문제가 있습니다. 당신은 그것을 시도해야합니다. – jams

0

귀하의 질문은 아무도 제대로 대답하기에 충분한 정보가없는 것입니다. 모든 사용자가 최신으로 유지하도록하려는 정보가있는 경우 해당 정보를 데이터베이스에 저장하십시오. 한 사용자가 사용자 세션에서 데이터를 편집하면 다른 사용자가 페이지를 새로 고칠 때마다 가장 업데이트 된 데이터를 갖게됩니다. 페이지를 주기적으로 새로 고치려면 자바 스크립트 타이머를 사용하십시오.

관련 문제