我有一个ASP.NET核心项目,MySQL作为我的数据库。我正在尝试创建一个迷你头版公告/横幅,就像您在访问的每个网页上看到的那样(隐私政策横幅)。
当用户访问该网站时,他们显然会阅读该消息,然后必须单击x按钮才能关闭该消息。我在JavaScript中使用了remove()
方法来实现这一目标。在清除浏览器缓存之前,该消息不会再次出现。
最佳路线是什么?他们的选择是保存在会话中还是Cookie中?
此外,我在以下情况下收到异常错误:
System.ArgumentNullException:'字符串引用未设置为字符串的实例。'
我做的远程接近正确吗?
HomeController.cs
const string SessionKeyMessage = "_Message";
public IActionResult Index(string announcements)
{
JumboVM jumboVM = new JumboVM();
var message = _service.GetMessages();
message = message.Where(m => m.Message == announcement);
jumboVM.BannerAnnouncement = _context.BannerAnnouncements;
HttpContext.Session.SetString(SessionKeyMessage, announcement); =>throws an exception
string messages = HttpContext.Session.GetString(SessionKeyMessage);
ViewBag.BannerAnnouncement = messages;
return View(jumboVM);
}
索引视图
@model Example.Models.JumboVM.JumboVM
@foreach (var item in Model.BannerAnnouncement)
{
@if (item.Message != null)
{
<div id="div" style="background-color: aliceblue; padding: 40px;">
@item.Message
//@ViewBag.BannerAnnouncement =>throws an exception error
<span id="button" class="text-center" style="font-size: 1.5em; cursor:pointer;">×</span>
</div>
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function () {
$("#button").click(function () {
$("#div").remove();
});
});
</script>