2012-04-10 34 views
0

我寫的ASP.Net應用程序,允許匿名人士張貼祈禱和其他人評論/確認到這些對象祈禱cookie和session。禱告存儲在SQL Server 2008數據庫中,並帶有一個唯一的標識符。問題關於在ASP.net應用

他們正在使用一箇中繼器控制和隱藏字段存儲行的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來正確調用方法後面的代碼?

+2

,要求用戶登錄這個網站? – 2012-04-10 00:04:26

回答

2

會議只會只要用戶在網站上持續。因此,如果他們關閉瀏覽器並回來,它將會消失。

餅乾會是更好的選擇,且僅當他們明確自己的cookie將這個數據消失。

如果你不需要用戶登錄,我想這是你所能做的。

繼承人上的cookies 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是真的要設置啓用爲false。

+0

感謝您的反饋。我已經有一個工作更新面板與存儲過程調用數據庫更新用戶點擊按鈕時的祈禱次數。唯一的問題是,用戶可以無限坐在他們,並點擊按鈕,只是看數字上去它還挺失敗的目的。我已閱讀MSDN文章。希望得到關於如何實現這種行爲的更具體的建議。有什麼樣的集合,我可以迭代cookie可以放在裏面?我怎樣才能比較cookies和Repeater項目? – WonderPanda 2012-04-10 00:46:18

+0

我更新了我的答案以上幾件事。據我所知,瀏覽器不共享cookie,所以如果有人使用不同的瀏覽器,他們的所有cookies都會消失。長話短說,如果你想要最好的/最一致的結果,你將不得不迫使他們登錄。這也將保護你的東西像垃圾郵件機器人,並使其更容易做上述情況,通過存儲他們的祈禱在數據庫中。 – 2012-04-10 01:17:31

+0

真棒我會試試看看它是如何工作的。最終,我肯定會添加成員資格添加,然後管理這樣的事情將是一個簡單的交界表,但我想保留一個匿名功能,以使不想通過註冊過程的人更容易訪問該網站。我採取的驗證碼爲匿名用戶防止垃圾郵件,現在,以及審批過程之前祈禱實際上得到張貼到網站。感謝您迄今爲止的所有幫助 – WonderPanda 2012-04-10 01:27:57

0

您可以使用會話來存儲用戶已經點擊了祈禱的物品,但是當他們回到你的網站就會忘記以前所有的項目,因爲該會話已丟失。

在這種情況下,你可以使用cookie來存儲所有用戶點擊了按鈕,「我會爲這個祈禱」祈禱項ID。如果你不想要求用戶登錄,我會走這條路。

對於您所描述的代碼,我想你可以使用一個ASP.NET UpdatePanel這將讓你更新/示人祈求的項目數量和禁用按鈕。