下面是我的POCO类:
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视图:
public ActionResult Index()
{
var poll = db.Polls.Include("PollOptions").Where(x => x.Active).ToList();
return View(model);
}在索引视图中,我希望用户投票,下面是我的投票部分:
@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>
}
}我的操作方法:
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
发布于 2013-03-05 03:17:36
我使用jQuery AJAX解决了我的问题:
@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>
}和我的动作方法:
[HttpPost]
public ActionResult Radio(int options)
{
var option = db.PollOptions.Find(options);
if (option != null) option.Votes++;
db.SaveChanges();
return RedirectToAction("Index");
}谢谢Daniel Liuzzi,因为如果单选按钮被选中,那么在发布表单时提交的单选按钮的值就不需要再去检查了。
发布于 2013-03-05 01:50:37
对所有单选按钮使用相同的名称:
@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>
}然后,在您的操作方法上,您将收到一个数组形式的选定答案:
[HttpPost]
public ActionResult Radio(int[] answers)
{
// TODO: Save your answers
}编辑
根据你关于value总是等于1的注释,那么传递它是没有意义的。您只需为每个选定的单选按钮设置值1。然后,您的操作方法如下所示:
[HttpPost]
public ActionResult Radio(int[] answers)
{
foreach (var id in answers)
{
var option = db.PollOptions.Find(id);
if (option != null) option.Votes++;
db.SaveChanges();
}
}https://stackoverflow.com/questions/15207590
复制相似问题