如何使用具有相同值的多按钮提交表单asp.net Mvc

时间:2011-04-03 13:47:52

标签: asp.net-mvc

我需要建立投票网站,所以我有几个候选人,下面是投票按钮, 我如何找到提交的按钮

感谢

2 个答案:

答案 0 :(得分:1)

给每个按钮命名,就像这样(注意它们都是“提交”按钮)::

<input type="submit" name="buttonYes" value="Yes" />
<input type="submit" name="buttonNo" value="No" />

然后,在您的控制器中,为这两个按钮名称中的每一个捕获一个参数,如下所示:

 public ActionResult Index(string buttonYes, string buttonNo) { ... }

然后,您可以通过检查这两个参数中的哪一个不为空来判断按下了哪个按钮;使用a按下的值等于按钮的“value”属性,另一个将为null:

if (buttonYes != null)
{
    // Then the yes button was preseed
}
else if (buttonNo != null)
{
   // Then the no button was pressed
} 
else
{
    // Neither button was used to submit the form
    // and we got here some other way
}

这样做的原因是因为Web浏览器将作为HTTP帖子的一部分按下的提交按钮的信息发送到Web服务器。未按下的按钮不会随帖子一起发送,因此参数将为空。

有很多方法可以重写和优化它,但这是它的本质,并显示了工作的基础 - 你可以从那里玩它。

答案 1 :(得分:1)

我不会使用按钮值,我会设置它,以便用于执行帖子的网址对投票本身进行编码。你可以通过几种方式做到这一点。

使用链接

 <div class="left">
   <img src="/images/candidate/@Model.Candidates[0].ID" alt="@Model.Candidates[0].Name" />
   @Html.ActionLink( "Vote for " + Model.Candidates[0].Name, "count", "vote" )
 </div>
 <div class="right">
   <img src="/images/candidate/@Model.Candidates[1].ID" alt="@Model.Candidates[1].Name" />
   @Html.ActionLink( "Vote for " + Model.Candidates[1].Name, "count", "vote" )
 </div>

使用单独的表格

 <div class="left">
   @using (Html.BeginForm( "count", "vote", new { id = Model.Candidates[0].ID } ))
   {
       <img src="/images/candidate/@Model.Candidates[0].ID" alt="@Model.Candidates[0].Name" />
       <input type="submit" value="Vote" />
   }
 </div>
 <div class="right">
   @using (Html.BeginForm( "count", "vote", new { id = Model.Candidates[1].ID } ))
   {
       <img src="/images/candidate/@Model.Candidates[1].ID" alt="@Model.Candidates[1].Name" />
       <input type="submit" value="Vote" />
   }
 </div>

上述任何一种都可以适用于AJAX。请注意,如果您关心,您需要建立一些机制来检测投票欺诈,例如,向网址添加一次性随机数,以验证它不会被多次使用;跟踪用户投票的次数(如果经过身份验证等)