我想为我正在研究的MVC4项目制作一个使用Razor语法的点击计数器。
我已经尝试过以下教程但是我正在寻找一种解决方案,每次重新启动解决方案时都不会将计数器清零。 http://www.c-sharpcorner.com/Blogs/46603/how-to-count-total-number-of-hit-in-Asp-Net-mvc.aspx
如何将命中值保存到数据库文件中,然后在每次加载解决方案时检索它?
我已经完全实现了上面的教程,但我正在寻找一种解决方案,允许我在每次解决方案打开时增加计数器。 (例如,它从1开始,下次打开解决方案时,它会说2,依此类推)
据我所知,你打算在数据库中添加一个新表等,但是我实际上写的是什么。我只使用过基于用户输入的数据库(即来自“html表单”,文本框等)。我不知道如何使整个过程自动化(在保存/编辑/加载数字方面)。它始终来自用户输入并且每次都创建新视图。
编辑:我在名为App_Data
的解决方案的MyMainDB.mdf
文件夹中有一个文件。如果我错了,请纠正我,但我相信这是指数据库。双击时,它会将我发送到服务器资源管理器并显示名为MyMainDBEntities
的文件。在这个数据库中,我有一个单独的,不相关的函数的现有表,我知道我必须创建一个表。制作完此表后,需要哪些信息?只是一个名为counter?的整数值
以下是我之前使用过数据库的示例:
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Surname)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.DisplayFor(modelItem => item.Password)
</td>
<td>
@Html.DisplayFor(modelItem => item.PasswordSalt)
</td>
<td>
@Html.DisplayFor(modelItem => item.Age)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { email=item.Email })
@Html.ActionLink("Delete", "Delete", new { email = item.Email })
</td>
</tr>
正如您所看到的,这些都不是自动完成的,因为名称为ActionLink
的底部的Edit
需要用户输入才能单击按钮,然后用户输入为其分配新值领域。
答案 0 :(得分:0)
为了做到这一点,您需要对您所遵循的教程进行2次不同的更改:
1)您需要初始化数据库中的值,而不是始终从0开始。
根据教程:
在Application_Start()方法中声明变量,如下面的代码。
var serviceLayer = new Services();
var initialCount = serviceLayer.GetCurrentCountFromDatabase();
Application["Totaluser"] = initialCount;
2)当你在Session_Start方法中增加计数时,你也想在数据库中增加它。
根据教程:
编写如下的session_Start()方法:
protected void Session_Start()
{
var serviceLayer = new Services();
var count = (int)Application["Totaluser"] + 1;
Application.Lock();
serviceLayer.ExecuteQueryToUpdateCountInDatabase(count);
Application["Totaluser"] = count;
Application.UnLock();
}
假设有一个类,'Services'存在实现(c#sql查询 - 例如here个)以从数据库中提取这些数据。