Я работаю над приложением, в котором голосование "за" и "против" аналогично 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?Я просто не уверен, как подойти к этой конкретной проблеме.