如何从FormCollection中获取复选框值?

时间:2015-03-11 12:52:10

标签: asp.net asp.net-mvc checkbox

我有一个复选框和按钮:

@using(Html.BeginForm())
{
    <div id="search-block">
        <input type="checkbox" name="showAll" id="showAll">Include completed
        <input type="submit" value="Apply"/>
    </div>
}

控制器中的第二件事:

[HttpPost]
public ActionResult Index(FormCollection collection)
{
    var showAll = collection["showAll"];
    TempData["showAll"] = showAll;

    ... 
    something
    ...
}

它确实在工作,但是:

如果未选中复选框,我将收到空(不会打扰我)。

如果选中了复选框,我会收到FormCollection的“开启”,这不是我需要的。我想收到真假。

我该怎么做?

5 个答案:

答案 0 :(得分:25)

<input type="checkbox" name="showAll" id="showAll">Include completed

将发布值"on""off"

此WONT绑定到布尔

要接收布尔值,您可以使用HTML Helper Checkbox 像

@Html.CheckBox("showAll")
<label for="showAll" style="display:inline">Include completed</label>

<强> 更新

  

如果选中,则html助手会回发"true,false"以及是否   取消选中为"false"

您可以将此解决方法设为

bool MyBoolValue= Convert.ToBoolean(collection["showAll"].Split(',')[0]);

这是因为Html帮助程序类添加了一个额外的hidden字段来保存复选框的状态

答案 1 :(得分:0)

我无法让这个工作,这是我提出的解决方案。我用html帮助器显示它。

@Html.CheckBoxFor(model => model.showAll, new { @class = "form-control", Name = "showAll"})

这是我不断跌倒的地方,以下是有效的。

bool MyBoolValue= (collection["showAll"] ?? "").Equals("true", StringComparison.CurrentCultureIgnoreCase);

答案 2 :(得分:0)

我已尝试使用输入标记,其工作方式如下所示:

<form method="post">
    <input type="checkbox" id="chkRmb" name="chkRmb" /> Remember Me?
    <input type="submit" value="Log In" class="btn btn-default login-btn" />
</form>

在控制器中,比较字符串值并将其转换为布尔值。

bool rmbMe = (formdata["chkRmb"] ?? "").Equals("on", StringComparison.CurrentCultureIgnoreCase);

答案 3 :(得分:0)

所以我给了它一个镜头,它似乎很乐意接受它,其中集合是我的FormCollection对象:

if (collection.AllKeys.Contains("Inactive"))
{
     np.Inactive = false;
}
else
{
    np.Inactive = true;
}

请注意,目标元素的名称令人困惑 - 但这是我寻求的预期结果。

答案 4 :(得分:0)

试试这个,它为我解决了同样的问题。以为如果其他人在将来遇到这个问题我会分享它。

[HttpPost]
public ActionResult Index(FormCollection collection)
{
    Boolean tempValue = collection["showAll"] != null ? true : false;
    TempData["showAll"] = tempValue;

    ... 
    something
    ...
}