我正在开发一个类似于 StackExchange 的具有上下投票的应用程序。
我希望能够拥有以下
- 用户点击投票,投票表中的记录被填充为 1
- 用户再次点击投票,记录被删除
^^ 反对票也会发生同样的事情
或者
- 用户点击投票,投票表中的记录被填充为 1
- 用户点击否决票,原来的记录被删除,新的记录加上-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
动作并发送两个参数?bool isUpDown
和int Vote
If isUpDown Then
MyRepository.Delete(EventID, UserID)
MyRepository.SubmitChanges()
End If
MyRepository.Insert(EventID, UserID, Vote)
MyRepository.SubmitChanges()
我不知道这个逻辑是否有任何漏洞,或者是否有更好的方法来实现这一点。计划是通过 AJAX 完成这一切。
此外,视图是否应该有两种形式(一种用于 UP,一种用于 DOWN),还是应该尝试使用 jQuery 进行更多管理?我只是不确定如何解决这个特定问题。