我遇到了一个可能是愚蠢的问题,但我只是看了看这些地方并且无法完成这项工作!
我创建了一个ASP.NET MVC Web应用程序,我想使用Application [“something”]来保存计数器以在线标记访问者。我在ASP.NET中做了几次这个过程,而不是在MVC ......
所以,在Global.asax上,我有以下代码
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
HttpContext.Current.Application["totalVisitas"] = 0;
HttpContext.Current.Application["visitasOnline"] = 0;
}
之后我创建了一个模型来使用这个数据,并且还创建了一个带有以下代码的Controller:
public class OnlineStatsController : Controller
{
// GET: OnlineStats
public ActionResult Index()
{
var modelOnline = new OnlineStatsViewModel
{
visitasOnline = (int)HttpContext.Application["visitasOnline"],
totalVisitas = (int)HttpContext.Application["totalVisitas"]
};
return PartialView("UserStats",modelOnline);
}
}
ViewModel代码:
public class OnlineStatsViewModel
{
public int totalVisitas { get; set; }
public int visitasOnline { get; set; }
}
}
最后,我有一个部分视图,其中包含以下代码:
@model {namespace}.Models.OnlineStatsViewModel
<h3>Visitas online: </h3>
<p id="visitasOnline">@Model.visitasOnline</p>
<h3>Total de Visitas: </h3>
<p id="totalVisitas"><span class="badge">@Model.totalVisitas </span></p>
它由layout.cshtml调用
<body>
@Html.Partial("_topBar")
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<div class="row">
<div class="col-md-4">
<p>© @DateTime.Now.Year -</p>
</div>
<div class="col-md-4">
@Html.Partial("UserStats", new {namespace}.Models.OnlineStatsViewModel());
</div>
</div>
</footer>
</div>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</body>
所有这一切,每次加载时,都会有0个在线用户和0个历史用户。我甚至试图对控制器中的值进行硬编码,使得像visitasOnline = 20000;但它只显示零...对不起,如果问题是愚蠢,我在MVC新手,并尝试在线几个课程,并得到这个问题=(
编辑---忘记写我更新的地方
在global.asax中,我还有以下内容:
public void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
HttpContext.Current.Session["userName"] = "guest";
HttpContext.Current.Application["visitasOnline"] = (int)HttpContext.Current.Application["visitasOnline"] +1;
HttpContext.Current.Application["totalVisitas"] = (int)HttpContext.Current.Application["totalVisitas"] +1;
}
public void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
HttpContext.Current.Session["userName"] = "";
HttpContext.Current.Application["visitasOnline"] = (int)HttpContext.Current.Application["visitasOnline"] - 1;
}
}
答案 0 :(得分:0)
由于有关会话商店的信息有限,出现此类问题的可能性可能是您可能遵循以下路径:
您编写代码以在调试应用程序一到两次后递增值。
由于您的会话可能尚未过期,因此在您稍后添加代码以增加值的位置时,不再调用Session_start
。因此给出值 0
要验证这是否是潜在问题,请通过在其他浏览器中打开应用程序网址强制应用再次致电Session_Start
,或在sessionTimeout
<中将Web.config
设置为较低值/ p>
如果提供更多信息,我会改进这个答案,但我认为这可能是问题,因为你的代码应该和我一起工作