首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在投票系统中投票?

如何在投票系统中投票?
EN

Stack Overflow用户
提问于 2013-03-05 01:39:56
回答 2查看 775关注 0票数 0

下面是我的POCO类:

代码语言:javascript
复制
public class PollOptions
    {
        public int Id { get; set; }
        public virtual Polls Polls { get; set; }
        public string Answer { get; set; }
        public int Votes { get; set; }
    }
public class Polls
    {
        public int Id { get; set; }
        public string Question { get; set; }
        public bool Active { get; set; }
        public virtual ICollection<PollOptions> PollOptions { get; set; }
    }

我将我的模型以这种方式传递给Index视图:

代码语言:javascript
复制
public ActionResult Index()
        {
           var poll = db.Polls.Include("PollOptions").Where(x => x.Active).ToList();
           return View(model);
        }

在索引视图中,我希望用户投票,下面是我的投票部分:

代码语言:javascript
复制
@section Polling{
   @foreach (var question in Model.Polls)
    {
        <h3>@question.Question</h3>
       <ul class="pollUnordedList">
       @foreach(var answer in question.PollOptions)
        {
            <li><input type="radio" name="opt" id="@answer.Id" value="1"/><span>@answer.Answer</span></li>
        }
        </ul>
    }
    @using (Html.BeginForm(actionName: "Radio", controllerName: "Home",routeValues: new { id = 2, value = 5 }))
    {
        <p><input type="submit" class="btn btn-primary" value="ارسال نظر" /></p>
    }
}

我的操作方法:

代码语言:javascript
复制
public void Radio(int Id=0,int value=0)
       {
           PollOptions opt = db.PollOptions.Find(Id);
           db.Entry(opt).State = System.Data.EntityState.Modified;
           opt.Votes += value;
           db.SaveChanges();
       }

如何获取pass的radioButton的值和id作为路由值,例如上面的路由中Id和value的值是2,5

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-05 03:17:36

我使用jQuery AJAX解决了我的问题:

代码语言:javascript
复制
@using (Html.BeginForm(actionName: "Radio", controllerName: "Home")) {
        foreach (var question in Model.Polls)
        {
            <h3>@question.Question</h3>
            <ul class="pollUnordedList">
                @foreach (var answer in question.PollOptions)
                {
                    <li>
                        @*@Html.RadioButton("options",false,new {id=@answer.Id})<span>@answer.Answer</span>*@
                        @Html.RadioButton("options",answer.Id)<span>@answer.Answer</span>
                    </li>
                }
            </ul>
        }
         <p>
            <input type="submit" id="btnVote" class="btn btn-primary" value="ارسال نظر" />
        </p>
    }

和我的动作方法:

代码语言:javascript
复制
[HttpPost]
       public ActionResult Radio(int options)
       {
           var option = db.PollOptions.Find(options);
           if (option != null) option.Votes++;
           db.SaveChanges();
           return RedirectToAction("Index");
       }

谢谢Daniel Liuzzi,因为如果单选按钮被选中,那么在发布表单时提交的单选按钮的值就不需要再去检查了。

票数 1
EN

Stack Overflow用户

发布于 2013-03-05 01:50:37

对所有单选按钮使用相同的名称:

代码语言:javascript
复制
@using (Html.BeginForm(actionName: "Radio", controllerName: "Home")) {
    foreach (var question in Model.Polls) {
        <h3>@question.Question</h3>
        foreach (var answer in question.PollOptions) {
            <label>
                <input type="radio" name="answers" value="@answer.Id" />
                @answer.Answer
            </label>
        }
    }

    <p><input type="submit" class="btn btn-primary" value="ارسال نظر" /></p>
}

然后,在您的操作方法上,您将收到一个数组形式的选定答案:

代码语言:javascript
复制
[HttpPost]
public ActionResult Radio(int[] answers)
{
    // TODO: Save your answers
}

编辑

根据你关于value总是等于1的注释,那么传递它是没有意义的。您只需为每个选定的单选按钮设置值1。然后,您的操作方法如下所示:

代码语言:javascript
复制
[HttpPost]
public ActionResult Radio(int[] answers)
{
    foreach (var id in answers)
    {
        var option = db.PollOptions.Find(id);
        if (option != null) option.Votes++;
        db.SaveChanges();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15207590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档