2012-09-13 2 views
0

사람들이 비디오에 댓글을 달 수있는 프로그램이 있습니다. 주석 상태는 대기열 상태와 같습니다. 관리자는 관리자 섹션으로 이동하여 주석을 승인 또는 제거로 표시 할 수 있습니다. 그들은 이전 또는 다음 버튼을 누를 때 대기열에 표시된 다음 항목으로 자동으로 이동할 수 있고, 주석을 승인하거나 제거 할 수 있기를 원합니다. jQuery 나 JavaScript를 사용하여이를 수행 할 수 있는지 또는 어떻게 코드 숨김을 수행 할 수 있는지 알 수는 없습니다 (C# .NET에 있음). 어떤 도움을 주시면 감사하겠습니다 :"이전"및 "다음"기능을 얻는 방법?

Status and value: 
In queue = 0 
Approved = 1 
Removed = 2 

다음은 코드 숨김입니다. 상태 변경 작업은 내가 할 수없는 유일한 일은 대기열에 표시된 다음 레코드로 이동하는 것입니다. 첫 번째 두 가지 이벤트는 비어 있습니다. 왜냐하면 내가 어떻게 채울 지 모르기 때문입니다. 간단히 말하면 대기열에 표시된 다음 레코드로 이동해야합니다. 당신은 더 이상 코드가 필요하면 알려 주시기 바랍니다

...

protected void previous_clicked(object sender, EventArgs e) 
    { 
    } 

    protected void next_clicked(object sender, EventArgs e) 
    { 
    } 

    protected void approve_clicked(object sender, EventArgs e) 
    { 
     currentMessage = new videomessage(Request["id"].ToString()); 

     status.SelectedValue = "1"; 

     currentMessage.status = "1"; 
     currentMessage.Save(); 
    } 

    protected void remove_clicked(object sender, EventArgs e) 
    { 
     currentMessage = new videomessage(Request["id"].ToString()); 

     status.SelectedValue = "2"; 

     currentMessage.status = "2"; 
     currentMessage.Save(); 
    } 
+0

당신이 목록을 만들 수있다 : 당신은 쉽게 위치 인덱스/증가 감소시키는하여 탐색을 구현할 수

// I made this method up because I do not know where your messages really come from. // => ADJUST TO YOUR NEEDS. private void onNewMessageArriving(string messageId) { videomessage arrivingMessage = new videomessage(messageId); _messagesToApprove.Add(arrivingMessage); } 

: 메시지가 도착 할 때마다, 같은 메소드를 호출하여 컬렉션에 추가 linkedList로 주석을 추가하고 그 다음과 이전에 수행합니까? –

+0

이 질문에 대한 답변을 얻으려면 좀 더 자세한 내용을 공유해야 할 것입니다. 지금/현재 귀하의 메시지는 어디에 저장되어 있습니까? '새로운 비디오 메시지 (Request [ "id"]. ToString())는 무엇을합니까? status.SelectedValue가 GUI 요소입니까? – Sogger

+0

나는 Sogger와 함께있어, 자세한 내용을 제공해야합니다. 페이지의 마크 업과 주석 목록을 채우는 데 사용하는 코드를 게시하십시오. – Icarus

답변

2

나에게 건축 적 도전과 같은 소리가납니다.

Queue을 사용하는 것이 좋습니다. 이 컬렉션 형식은 first-in, first-out (FIFO) 방식입니다. 객체를 대기열에 넣고 같은 순서로 다시 가져옵니다.. 이 대기열에서 수신 된 객체는 대기열에서 자동으로 제거되므로 동일한 요소를 두 번 처리하지 않아도됩니다.

귀하의 설명 워크 플로우는 다음의 간단한 단계로 작동합니다 :

  1. 메시지가 도착 할 때마다, 당신은 객체 into your queue을 넣어.
  2. 관리자가 next button을 클릭하면 첫 번째 개체 out of the queue을 요청합니다.
  3. 관리자가 관리 작업을 수행하고 메시지를 승인합니다.
  4. 위의 항목 1부터 다시 Next을 클릭하십시오.

은 [편집]

아차, 내 Queue 접근 방식은 이전 항목으로 다시 이동을 허용하지 않을 것을 깨달았다.

이 경우 간단한 List 컬렉션을 사용하는 것이 좋습니다. 이 목록은 목록에서 0 기준 위치를 통해 액세스 할 수 있습니다. 이렇게하면 앞으로/뒤로 탐색을 쉽게 구현할 수 있습니다.

예제 코드에는 사용자 환경에 대해 잘 모를 수있는 점이 많으므로 제 코드는 많은 가정을합니다.

// Store the index of the current message 
// Initial value depends on your environment. :-) 
private int _currentIndex = 0; 

:

private IList<videomessage> _messagesToApprove = new List<videomessage>(); 

또한 컬렉션의 현재 위치를 추적 몇 가지 변수가 필요합니다

당신은 승인을 받아야하는 메시지를 포함 컬렉션을 저장 somwhere 필요 먼저 새 메시지가 컬렉션에 추가되는 시작 지점이 필요합니다 (예 : 이벤트 구독 등).

private void previous_Click(object sender, EventArgs e) 
{ 
    // Check that we do not go back further than the beginning of the list 
    if ((_currentIndex - 1) >= 0) 
    { 
    _currentIndex--; 
    this.currentMessage = this._messagesToApprove[_currentIndex]; 
    } 
    else 
    { 
    // Do nothing if the position would be invalid 
    return; 
    } 
} 

private void next_Click(object sender, EventArgs e) 
{ 
    // Check if we have new messages to approve in our list. 
    if ((_currentIndex + 1) < _messagesToApprove.Count) 
    { 
    _currentIndex++; 
    currentMessage = _messagesToApprove[_currentIndex]; 
    } 
    else 
    { 
    // Do nothing if the position would be invalid 
    return; 
    } 
} 

private void approve_Click(object sender, EventArgs e) 
{ 
    // Sorry, I don't know where exactly this comes from, needs to be adjusted to your environment 
    status.SelectedValue = "1"; 

    this.currentMessage.status = "1"; 
    this.currentMessage.Save(); 

    // If you want to remove items that have been checked by the admin, delete it from the approval list. 
    // Otherwise remove this line :-) 
    this._messagesToApprove.RemoveAt(_currentIndex); 
} 

private void remove_Click(object sender, EventArgs e) 
{ 
    // Sorry, I don't know where exactly this comes from, needs to be adjusted to your environment 
    status.SelectedValue = "2"; 

    this.currentMessage.status = "2"; 
    this.currentMessage.Save(); 

    // If you want to remove items that have been checked by the admin, delete it from the approval list. 
    // Otherwise remove this line :-) 
    this._messagesToApprove.RemoveAt(_currentIndex); 
} 
+0

어떻게 완료 되나요? 나는이 기술에 익숙하지 않다. – Peter

+0

@Peter : 기술이 아닙니다. 'Queue'는 .NET 클래스 일뿐입니다. Jus는 MSDN 설명서를 살펴 보았습니다. 그것을 사용하는 것은 매우 솔직합니다. 그러나 그 동안'List' 콜렉션을 사용하는 것이 당신의 경우에 더 적절하다는 것을 깨달았습니다. 샘플 솔루션에 대한 추가 코드 스 니펫을 참조하십시오. –

0

저장 세션이나 viewstate가 현재 주석의 id 다음 또는 이전 버튼 클릭에 그것을 다시 얻을하고 그에 따라 표시 :

Session["id"] = 2; 
int id = (int) Session["id"];