Concept needed for up/down voting using AJAX and MVC

456 views Asked by At

I'm working on an app that has up and down voting similar to StackExchange.

I want to be able to have the following

  1. user clicks up vote, and a record in the vote table gets populated with 1
  2. user clicks up vote again and the record is deleted

^^ same thing happens with down votes

or

  1. user clicks up vote, and a record in the vote table gets populated with 1
  2. user clicks down vote instead, and the original record is deleted, and a new record is added with -1

My table looks like this

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

I need a good concept in how to implement this. Do I call a VoteController Action and send it two params? bool isUpDown and int Vote

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

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

I don't know if there are any holes in this logic, or if there is a better way to achieve this. The plan is to do it all via AJAX.

Also, should the view have two forms (one for UP and one for DOWN), or should I try an manage more with jQuery? I'm just not sure how to approach this particular problem.

1

There are 1 answers

0
Adilson de Almeida Jr On BEST ANSWER

Try to implement it with jQuery and one Action like with two arguments bool upDown and int EventID. Your action can return a JSON with the result (accept or reject depending on if the user has voted previously) and the current votes for that event.