Este é um projeto de votação (enquete) desenvolvido por Saulo, um de nossos visitantes que envia dicas, sugestões e deixa vários comentários no blog.
Abaixo vamos ver o projeto da enquente, desenvolvido em ASP.NET com Entity Framework 4, utilizando cookies para limitar o número de votos.
Créditos: Saulo Giori Pacífico.
Twitter - twitter.com/saulopacifico - @saulopacifico
Facebook - facebook.com/SauloPacifico
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Votacao.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Votação</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h4>O que você achou desse projeto?</h4>
<asp:RadioButtonList runat="server" ID="rblOpcao">
<asp:ListItem Text="Excelente" />
<asp:ListItem Text="Bom" />
<asp:ListItem Text="Regular" />
<asp:ListItem Text="Ruim" />
<asp:ListItem Text="Péssimo" />
</asp:RadioButtonList>
<br />
<asp:Button Text="Votar" runat="server" Width="100px" ID="btnVotar" OnClick="btnVotar_Click" />
<asp:Label Text="" runat="server" ID="lblVazio" ForeColor="Red" />
<br /> <br />
<a href="Parciais.aspx">Parciais</a>
</div>
</form>
</body>
</html>
Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Votacao
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
VerificarCookieVotacao();
}
private void VerificarCookieVotacao()
{
//Vejo se o cookie "Votou" é diferente de nulo
//Se for, impossibilito o usuário de votar
//mais uma vez, e...
if (Request.Cookies["Votou"] != null)
{
//Mudo a propriedade Text do botão
btnVotar.Text = "Você já votou!";
//e desativo ele
btnVotar.Enabled = false;
}
}
protected void btnVotar_Click(object sender, EventArgs e)
{
//Instancio o meu contexto
using (DadosEntities ctx = new DadosEntities())
{
//Instancio o objeto do tipo "Votacao"
//que vem do bd
Votacao obj = ctx.Votacao.FirstOrDefault();
//Faço variáveis inteiras receberem
//os respectivos valores do banco
int Excelente = Convert.ToInt32(obj.Excelente);
int MuitoBom = Convert.ToInt32(obj.Bom);
int Regular = Convert.ToInt32(obj.Regular);
int Ruim = Convert.ToInt32(obj.Ruim);
int Pessimo = Convert.ToInt32(obj.Pessimo);
//Percorro o Radio Button List
foreach (ListItem item in rblOpcao.Items)
{
//Verifico se existe algum item selecionado...
//De acordo com a opção selecionada, vou persistir
//o valor que já existe e foi capturado do banco + 1
if (item.Selected)
{
if (item.Text == "Excelente")
{
obj.Excelente = Excelente + 1;
}
if (item.Text == "Bom")
{
obj.Bom = MuitoBom + 1;
}
if (item.Text == "Regular")
{
obj.Regular = Regular + 1;
}
if (item.Text == "Ruim")
{
obj.Ruim = Ruim + 1;
}
if (item.Text == "Péssimo")
{
obj.Pessimo = Pessimo + 1;
}
}
//Caso não nenhuma das opções esteja selecionadas
//exibo uma mensagem...
else
lblVazio.Text = "Escolha uma opção antes de votar!";
}
//Salvo as alterações
ctx.SaveChanges();
//Preencho o cookie com algum valor
//para ser verificado no Page_Load
Response.Cookies["Votou"].Value = "Sim";
//Defino a duração do cookie para 60 dias
Response.Cookies["Votou"].Expires = DateTime.Now.AddDays(60d);
//Redireciono para a página de parciais
Response.Redirect("Parciais.aspx");
}
}
}
}
Parciais.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Parciais.aspx.cs" Inherits="Votacao.Parciais" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Resultados Parciais</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h4>
Resultados parciais
</h4>
<asp:Label ID="lblExcelente" Text="" runat="server" /><br />
<asp:Label ID="lblMuitoBom" Text="" runat="server" /><br />
<asp:Label ID="lblRegular" Text="" runat="server" /><br />
<asp:Label ID="lblRuim" Text="" runat="server" /><br />
<asp:Label ID="lblPessimo" Text="" runat="server" /><br />
<br />
<a href="Default.aspx">Voltar</a>
</div>
</form>
</body>
</html>
Parciais.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Votacao
{
public partial class Parciais : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Instancio o meu contexto
using (DadosEntities ctx = new DadosEntities())
{
//Instancio o objeto do tipo "Votacao"
//que vem do bd
Votacao obj = ctx.Votacao.FirstOrDefault();
//Faço variáveis inteiras receberem
//os respectivos valores do banco
int Excelente = Convert.ToInt32(obj.Excelente);
int Bom = Convert.ToInt32(obj.Bom);
int Regular = Convert.ToInt32(obj.Regular);
int Ruim = Convert.ToInt32(obj.Ruim);
int Pessimo = Convert.ToInt32(obj.Pessimo);
//Crio uma variável para somar a quantidade total de votos
int Total = Excelente + Bom + Regular + Ruim + Pessimo;
//Exibo as parciais de cada opção fazendo os calculos necessários
//para obter as porcentagens individualmente
lblExcelente.Text = string.Format("{0:F1} % dos votos foi \"Excelente\"",
(100) / Convert.ToDouble(Total) * Convert.ToDouble(Excelente));
lblMuitoBom.Text = string.Format("{0:F1} % dos votos foi \"Bom\"",
(100) / Convert.ToDouble(Total) * Convert.ToDouble(Bom));
lblRegular.Text = string.Format("{0:F1} % dos votos foi \"Regular\"",
(100) / Convert.ToDouble(Total) * Convert.ToDouble(Regular));
lblRuim.Text = string.Format("{0:F1} % dos votos foi \"Ruim\"",
(100) / Convert.ToDouble(Total) * Convert.ToDouble(Ruim));
lblPessimo.Text = string.Format("{0:F1} % dos votos foi \"Péssimo\"",
(100) / Convert.ToDouble(Total) * Convert.ToDouble(Pessimo));
}
}
}
}
Exixtem 2 opções de banco de dados junto no arquivo de download do projeto, uma no App_Data e outra em .bak.
Caso opte por usar o .bak, crie um novo banco de dados e restaure este backup. Mude tambem a connectionstring no Web.config.