2

私は StackExchange に似た上下投票を持つアプリに取り組んでいます。

私は次のものを持つことができるようにしたい

  1. ユーザーが投票をクリックすると、投票テーブルのレコードに 1 が入力されます
  2. ユーザーが再度投票をクリックすると、レコードが削除されます

^^反対票でも同じことが起こります

また

  1. ユーザーが投票をクリックすると、投票テーブルのレコードに 1 が入力されます
  2. ユーザーが代わりに反対票をクリックすると、元のレコードが削除され、新しいレコードが -1 で追加されます

私のテーブルはこんな感じ

USE [MyProject]
GO

/****** Object:  Table [dbo].[EventVotes]    Script Date: 02/21/2011 15:16:25 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[EventVotes](
    [UserID] [int] NOT NULL,
    [EventID] [int] NOT NULL,
    [Vote] [int] NOT NULL,
    [VoteDate] [datetime] NOT NULL,
 CONSTRAINT [PK_EventVotes_1] PRIMARY KEY CLUSTERED 
(
    [UserID] ASC,
    [EventID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[EventVotes]  WITH CHECK ADD  CONSTRAINT [FK_EventVotes_Events] FOREIGN KEY([EventID])
REFERENCES [dbo].[Events] ([ID])
GO

ALTER TABLE [dbo].[EventVotes] CHECK CONSTRAINT [FK_EventVotes_Events]
GO

ALTER TABLE [dbo].[EventVotes]  WITH CHECK ADD  CONSTRAINT [FK_EventVotes_Users] FOREIGN KEY([UserID])
REFERENCES [dbo].[Users] ([ID])
GO

ALTER TABLE [dbo].[EventVotes] CHECK CONSTRAINT [FK_EventVotes_Users]
GO

これを実装する方法については、良いコンセプトが必要です。VoteControllerアクションを呼び出して、 2 つのパラメーターを送信する必要がありますか? bool isUpDownint Vote

If isUpDown Then
    MyRepository.Delete(EventID, UserID) 
    MyRepository.SubmitChanges()
End If

MyRepository.Insert(EventID, UserID, Vote)
MyRepository.SubmitChanges()

このロジックに穴があるかどうか、またはこれを達成するためのより良い方法があるかどうかはわかりません。計画は、AJAX を介してすべてを行うことです。

また、ビューには 2 つのフォーム (UP 用と DOWN 用) が必要ですか、それとも jQuery でさらに管理を試みる必要がありますか? この特定の問題にアプローチする方法がわかりません。

4

1 に答える 1

2

jQueryと、2つの引数boolupDownとintEventIDのような1つのアクションを使用して実装してみてください。アクションは、結果(ユーザーが以前に投票したかどうかに応じて、承認または拒否)とそのイベントの現在の投票を含むJSONを返すことができます。

于 2011-03-07T04:05:15.460 に答える