2016-11-14 10 views
0

私のビューのボタンがsessionsを使用してクリックされた回数を数える方法と、asp.netだけをjQueryを使用してカウントする方法があります。ボタンが何回クリックされたかを数える

public ActionResult ClickCounter() 
     { 
      return View(); 
     } 

と私の見解:ここ

は私のアクションメソッド(空)である

@{ 
    ViewBag.Title = "ClickCounter"; 
} 

<h2>ClickCounter</h2> 

@using (@Html.BeginForm()) 
{ 
    <!-- form content here --> 
    @Session["num"] = 0; 
    <form method="post"> 
     <fieldset> 
      <legend>Button clicks counter</legend> 
      <div> 
       <label for="Clciks">Clicks:</label> 

       <h2>@Session["num"]</h2> 
      </div> 
      <div> 
       <label>&nbsp;</label> 
       <input type="submit" value="Click!" class="submit" /> 
      </div> 
     </fieldset> 
    </form> 
} 

はラメの質問のためすみませんが、私は完全な初心者だとどのようにこれを理解しようとしていますスタッフの仕事。私はgoogleingを試みた。 私はちょうど目的のためにセッションを使用して私のビューでh2のクリック数を表示したい。

ヒントをいただければ幸いです。

+2

現在 '@Session [ "NUM"] = 0;'カウンタをリセットします毎回あなたはそのページを見る。あなたのアクションメソッドに '(int)Session [" num "] ++;'を入れてみてください。まだ設定されていない場合は、セッション値を初期化するために何かが必要な場合があります。 – ADyson

答えて

1

単純にフォームの送信時にクリック数を増やす場合は、http postアクションメソッドを更新して、存在する場合はセッション値を読み取り、増やして戻すことができます。存在しない場合は、初期化します。

const string sessionVariableName = "num"; 
public ActionResult ClickCounter() 
{ 
    if (Session[sessionVariableName] == null) 
    { 
     Session[sessionVariableName] = 0; 
    } 
    return View(); 
} 
[HttpPost] 
public ActionResult ClickCounter(string dummyParam) 
{  
    if (Session[sessionVariableName] == null) // should not happen! 
    { 
     Session[sessionVariableName] = 0; 
    } 
    else 
    { 
     var n = (int)Session[sessionVariableName]; 
     n++; 
     Session[sessionVariableName] = n; 
    } 
    return View(); 
} 

送信時にGETフォームメソッドを実行していることを確認してください。

また、アクションメソッドでこれを行っているので、この行のビューで(再)初期化を削除する必要があります。@Session["num"] = 0;また、ネストされたフォームは無効なので、入れ子にしてはいけません。 Html.BeginFormヘルパーはフォームタグのマークアップをレンダリングします。したがって、あなたが持っている内側のフォームタグを削除してください。

+0

返事をありがとう。私はちょうどセッションをカウントしないでください。[sessionVariableName] = count;から来た。 –

+0

アクションメソッドでこれを行っているので、この行の '@Session [" num "] = 0;'で(再)初期化を削除する必要もあります。 – Shyju

+0

ええ、私はそれを削除しました。しかし、基本的に私が今すぐボタンを押すと、URLに疑問符が追加され、ページが見つかりません。 –

1

この質問にはasp.net-mvcとタグ付けされていますが、フレームワークを利用しないのはなぜですか?

モデル

class MyModel 
{ 
    public int ClickCount { get; set; } 
} 

ビュー

@model MyModel 
@{ 
    ViewBag.Title = "ClickCounter"; 
} 

<h2>@ViewBag.Title</h2> 

<form method="post"> 
    <!-- hidden input of the current click count --> 
    @Html.HiddenFor(m => m.ClickCount) 
    <fieldset> 
     <legend>Button clicks counter</legend> 
     <div> 
      @Html.LabelFor(m => m.ClickCount) 
      <h2>@Model.ClickCount</h2> 
     </div> 
     <div> 
      <button type="submit">Submit!</button> 
     </div> 
    </fieldset> 
</form> 

はコントローラ

const string clickCountSessionKey = "clickCount"; 
[HttpGet] 
public ActionResult ClickCounter() 
{ 
    // initialize the model 
    var model = new MyModel() { ClickCount = 0 }; 
    var previousClickCount = Session[clickCountSessionKey]; 
    if (previousClickCount != null) 
    { 
     model.ClickCount = (int)previousClickCount; 
    } 
    return View(model); 
} 

[HttpPost] 
public ActionResult ClickCounter(MyModel model) 
{ 
    // increment the click count of the model 
    model.ClickCount++; 
    // track the click count in the session 
    Session[clickCountSessionKey] = model.ClickCount; 
    return View(model); 
} 
関連する問題