0

私は、匿名の人々が祈りを投稿したり、他の人がコメントしたり、これらのオブジェクトを祈ることを確認したりできるようにする ASP.Net アプリケーションを作成しています。祈りは、一意の識別子を使用して SQL Server 2008 データベースに保存されます。

これらは、リピーター コントロールと非表示フィールドを使用して表示され、行の ID を格納します。リピーターの各アイテムには、匿名の人々が祈ることができるボタンが含まれており、これはデータベース内のカウンターとして増加します。

基本的には、ユーザーがこのアイテムを祈っていることを確認したら、ボタンを無効にして、その行の合計数を表示したいと考えています。

Cookie/セッションにデータを保存できることを理解しているので、これまでに思いついた唯一の解決策は、行のIDをこれらのオブジェクトの1つに保存し、リピーターコントロール内でカスタムロジックを使用して確認することですどれが存在するかを確認します。

このようなことを達成するための最も効率的な方法について、誰か洞察を提供できますか? 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でコードビハインドメソッドを適切に呼び出す方法を誰かが理解するのを手伝ってくれますか?

4

2 に答える 2

2

セッションは、ユーザーがサイトにいる間のみ持続します。したがって、ブラウザを閉じて戻ってくると、消えてしまいます。

Cookie の方が適切であり、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 に設定したいので使用します。

于 2012-04-10T00:14:16.610 に答える
0

セッションを使用して、ユーザーがクリックした祈りのアイテムを保存できますが、ユーザーがサイトに戻ってくると、セッションが失われているため、以前のアイテムはすべて忘れられます。

この場合、Cookie を使用して、ユーザーが「これを祈ります」ボタンをクリックしたすべての祈りのアイテム ID を保存できます。ユーザーのログインを必要としない場合は、この方法を使用します。

あなたが説明しているコードについては、アイテムを祈っている人の数を更新/表示し、ボタンを無効にすることができるASP.NET UpdatePanelを使用できると思います。

于 2012-04-10T00:18:47.907 に答える