FormCollection未获得单选按钮的正确值

时间:2012-06-06 00:46:08

标签: c# asp.net-mvc-3 radio-button

当我发布FormCollection并尝试获取单选按钮的值时,它总是取最后一个单选按钮的值(无论选中哪一个)。它为什么这样做?我的临时解决方法是创建一个隐藏值并添加一个onclick JS方法。我尝试使用纯HTML代码,结果相同。

查看代码

@Html.RadioButton("Radio", "No", true, new { id = "Radio0"}) + " No");
@Html.RadioButton("Radio", "Yes", false, new { id = "Radio1"}) + " Yes");

结果HTML

<input checked="checked" id="Radio0" name="Radio" type="radio" value="No"> No
<input id="Radio1" name="Radio" type="radio" value="Yes"> Yes

控制器代码

[HttpPost, ValidateInput(false)]
public ActionResult MyPostBack(FormCollection form)
{
    string radio = form["Radio"]; //************** this is always "Yes"
    return View("MyView");
}

1 个答案:

答案 0 :(得分:0)

实际上无法复制这个问题。它正确识别控制器上PostBack上的所选单选按钮。

您可能需要检查视图的代码(使用View的给定语法,它不应该首先呈现页面并且应该抛出编译错误)

这是我正在测试的观点

@{
    ViewBag.Title = "MyView";
}

<h2>MyPostBack</h2>
@using (Html.BeginForm())
{
    @Html.RadioButton("Radio", "No", true, new { id = "Radio0"}) @:No
    @Html.RadioButton("Radio", "Yes", false, new { id = "Radio1"}) @:Yes
    <input type ="submit" runat="server" id="btnSubmit" />
}

修改

根据您的评论,由于您使用的是DevExpress,请先查看提供的文档。它应该指向正确的方向。进行一些Google搜索,发现除了RadioButton扩展名外,还有一个RadioButtonList扩展名。以下是一些可以帮助您的链接。

DevExpress documentation (RadiButtonList)

A working example on using RadioButtonList

A discussion thread on RadioButton(虽然我找不到关于如何使用RadioButton的示例;根据您可以使用RadioButton的主题,if是否可以选择两个选项;否则你需要选择RadioButtonList

此外,正如大家所提到的,传递Model/ViewModel而不是发送FormCollection

是下注者