我正在编写一个ASP.Net应用程序,允许匿名人员发布祷告和其他人评论/确认为这些对象祷告。祷告存储在具有唯一标识符的SQL Server 2008数据库中。
使用转发器控件和隐藏字段显示它们以存储行的ID。转发器中的每个项目都包含一个按钮,允许匿名人员进行祈祷,并在数据库中作为计数器递增。
基本上,一旦用户确认他/她正在为此项目祈祷,我想禁用该按钮并显示该行的总计数。
我的理解是我可以将数据存储在cookie /会话中,因此到目前为止我唯一能够提出的解决方案是将行的ID存储到其中一个对象中,然后在我的转发器中使用自定义逻辑控制以检查哪些存在。
任何人都可以提供一些见解,了解实现此类目标的最有效方法是什么?如果有cookie或会话以外的选项,我也很高兴听到这个。
编辑: 我正在尝试使用以下逻辑来实现此解决方案。
代码隐藏:
protected bool IsPrayerInCookie(string prayerId)
{
if(Request.Cookies["prayers"][prayerId] != null)
{
return false;
}
else
{
return true;
}
}
ASPX:
<span class="confirmed_prayers"><span class="trans">
<asp:Label runat="server" ID="lblConfirmedPrayers" Text='<%# Eval("ConfirmedPrayers") %>' />
people have prayed for this.</span></span>
<% if(!IsPrayerInCookie(Eval("PrayerId").ToString()))
{
%>
<asp:LinkButton ID="btnPray" CssClass="but_styled" runat="server" TabIndex="8" CommandName="IncrementPrayer">
<span><span class="check">
Pray for This</span></span></asp:LinkButton>
<%
}
%>
然而,这不起作用。任何人都可以帮我弄清楚如何使if语句在aspx文件中工作,以正确的方式使用正确的ID调用后面的代码吗?
答案 0 :(得分:2)
会话只会在用户在网站上时持续。因此,如果他们关闭浏览器并返回,它就会消失。
Cookies是更好的选择,只有当他们清除他们的cookie时,这些数据才会消失。
如果您不要求用户登录,我认为这就是您所能做的。
关于cookie的MSDN页面:
http://msdn.microsoft.com/en-us/library/ms178194.aspx
对于实际的cookie存储,我会做类似的事情:
Response.Cookies["prayerlist"][CurrentPrayerItemID].Value = "something"; //All that matters is that they have the cookie with this ID.
Response.Cookies["prayerlist"].Expires = DateTime.MaxValue;
因此,当有人点击添加该项时,您首先要检查他们的Cookie中是否已有该ID,如下所示:
if(Response.Cookies["prayerlist"][CurrentPrayerItemID] != null)
{
Response.Cookies["prayerlist"][CurrentPrayerItemID].value = "something";
// Add prayer to Database
}
同样,每当绑定转发器时,都会检查cookie。如果他们有那个cookie,你将禁用相应的祈祷按钮。
我不知道如何处理这个问题,因为idk如何绑定,但它看起来像这样:
foreach(Item item in YourListOfItemsThatYouAreBindingToTheRepeater)
{
if(Response.Cookies["prayerlist"][CurrentPrayerItemID] != null)
{
//Disable Button - Set "HasPrayed" = true
}
}
要实际禁用该按钮,我要做的是将列表中的值设置为false,然后在aspx页面中执行以下操作:
<asp:Button ID="button1" runat="server" Enabled='<%# !(bool)Eval("HasPrayed") %>' />
使用!(bool)Eval("HasPrayed")
,因为如果HasPrayed为true,则要将enabled设置为false。
答案 1 :(得分:0)
您可以使用会话来存储用户点击过的祈祷项目,但是当他们回到您的网站时,会忘记之前的所有项目,因为会话已经丢失。
在这种情况下,您可以使用cookie来存储用户点击“我会为此祈祷”按钮的所有祈祷项ID。如果您不想要用户登录,我会选择此路线。
对于您所描述的代码,我认为您可以使用ASP.NET UpdatePanel来更新/显示为该项目祈祷的人数并禁用该按钮。