2016-11-14 65 views
0

我想知道我怎么能算的时间在我看来,一个按钮使用sessions,而不是点击使用jQuery,只是asp.net的数量。计数一个按钮被点击了多少次

这里是我的操作方法(空):

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] =计数计数;来自。 –

+0

还需要除去(再)初始化视图中该行'@Session [“NUM”] = 0;',因为我们正在做的是,在操作方法。 – Shyju

+0

是的,我删除它。但基本上,当我现在按下按钮,它只是添加一个问号到网址,并说没有找到页面。 –

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); 
}