Концепция, необходимая для голосования вверх/вниз с использованием AJAX и MVC

Я работаю над приложением, в котором голосование вверх и вниз похоже на StackExchange.

Я хочу иметь возможность иметь следующее

  1. пользователь нажимает на голосование, и запись в таблице голосования заполняется 1
  2. пользователь снова нажимает голосование, и запись удаляется

^^ то же самое происходит с отрицательными голосами

or

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


person Chase Florell    schedule 21.02.2011    source источник
comment
Что ты спрашиваешь? Формы или ajax полностью зависят от вас и не повлияют на то, насколько они функциональны.   -  person John Farrell    schedule 22.02.2011
comment
Я спрашиваю: А) звучит ли логика, Б) есть ли преимущества в использовании форм?   -  person Chase Florell    schedule 22.02.2011
comment
Вы взглянули на дамп данных Creative Commons о переполнении стека? Гензельман создал из него модель EF. Вы должны просто основывать свою БД на схеме БД стека. Это то, что я буду делать, когда мне также нужно будет ввести голосование в нашу систему.   -  person RPM1984    schedule 22.02.2011
comment
О, не знал, что такое существует. Где мы можем найти этот драгоценный камень?   -  person Chase Florell    schedule 22.02.2011
comment
@ RPM1984 - вы знаете, где я могу найти дамп данных и модель EF Гензельмана?   -  person Chase Florell    schedule 17.04.2011
comment
@rockinthesixstring — вот: hanselman.com/blog/   -  person RPM1984    schedule 17.04.2011


Ответы (1)


Попробуйте реализовать это с помощью jQuery и одного действия, например, с двумя аргументами bool upDown и int EventID. Ваше действие может вернуть JSON с результатом (принять или отклонить в зависимости от того, голосовал ли пользователь ранее) и текущими голосами для этого события.

person Adilson de Almeida Jr    schedule 07.03.2011