计算单击按钮的次数

时间:2016-11-14 16:12:45

标签: c# asp.net-mvc

我想知道如何使用 @{ 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> } 计算我的视图中的按钮被点击的次数,而不是使用jQuery,只是asp.net。

这是我的动作方法(空):

{{1}}

和我的观点:

{{1}}

请原谅我的蹩脚问题,但我是一个完整的新手,并试图了解这些东西是如何工作的。我试过googleing。 我只想在视图中使用会话显示h2中的点击次数。

任何提示都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

如果只是为了增加表单提交上的点击次数,您可以更新http post action方法以读取会话值(如果存在)并增加并重新设置。如果不存在,请将其初始化。

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;视图中的(重新)初始化,因为我们在action方法中执行此操作。此外,您不应该使用嵌套表单,因为它无效。 Html.BeginForm帮助器将呈现表单标记的标记。因此,请删除您拥有的内部表单标记。

答案 1 :(得分: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);
}