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动作并发送两个参数?bool isUpDownint Vote

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

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

我不知道这个逻辑是否有任何漏洞,或者是否有更好的方法来实现这一点。计划是通过 AJAX 完成这一切。

此外,视图是否应该有两种形式(一种用于 UP,一种用于 DOWN),还是应该尝试使用 jQuery 进行更多管理?我只是不确定如何解决这个特定问题。

4

1 回答 1

2

尝试使用 jQuery 和一个 Action 来实现它,例如使用两个参数 bool upDown 和 int EventID。您的操作可以返回带有结果的 JSON(接受或拒绝,具体取决于用户之前是否投票过)和对该事件的当前投票。

于 2011-03-07T04:05:15.460 回答