0

私は人々がビデオにコメントを残すことができるプログラムを持っています。コメントはキューステータスと同じです。管理者は、管理セクションに移動して、コメントを承認済みまたは削除済みとしてマークできます。彼らは、前のボタンまたは次のボタンのいずれかを押したとき、およびコメントを承認または削除したときに、キューにマークされた次のアイテムに自動的に移動できるようにしたいと考えています。私はjQueryやJavaScriptを十分に理解していないので、それらを使用してそれを実行できるかどうか、またはコードビハインド(これはC#.NETにあります)を介して実行する方法を知ることができません。任意の助けをいただければ幸いです:

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

これがコードビハインドです。ステータス変更は機能します。私ができない唯一のことは、キューでマークされた次のレコードに移動することです。最初の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();
    }
4

2 に答える 2

2

私にとっては建築上の挑戦のように聞こえます。

キューを使用することをお勧めします。これは、先入れ先出し(FIFO)アプローチ従ったコレクションタイプです。オブジェクトをキューに入れて、同じ順序で戻します。このキューから受信されたオブジェクトは自動的にキューから削除されるため、同じ要素を2回処理しないようにすることができます。

説明したワークフローは、次の簡単な手順で機能します。

  1. メッセージが到着するたびに、オブジェクトをキューに入れます。
  2. 管理者がをクリックすると、キューからnext button最初のオブジェクトを要求します。
  3. 管理者は管理タスクを実行し、メッセージを承認します。
  4. Next上記の項目1からもう一度クリックします。

[編集]

おっと、私のQueueアプローチでは前のアイテムに戻ることができないことに気づきました。

この場合、単純なListコレクションを使用することをお勧めします。このリストには、リスト内の0から始まる位置からアクセスできます。これにより、前方/後方ナビゲーションの実装が容易になります。

私のサンプルコードについては、あなたの環境について私が知ることができないことがたくさんあることを覚えておいてください、それで私のコードはここで多くの仮定をします。

承認されるメッセージを含むコレクションをどこかに保存する必要があります。

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

コレクション内の現在の位置を追跡する変数も必要になります。

// Store the index of the current message
// Initial value depends on your environment. :-)
private int _currentIndex = 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);
}

位置インデックスをインクリメント/デクリメントすることで、ナビゲーションを簡単に実装できます。

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);
}
于 2012-09-13T15:14:09.517 に答える
0

id現在のコメントをセッションまたはビューステートに保存し、次または前のボタンクリックで元に戻し、それに応じて表示します。

Session["id"] = 2;
int id = (int) Session["id"]; 
于 2012-09-13T14:52:37.397 に答える