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

Ole*_*jko 5 asp.net checkbox asp.net-mvc

我有一个复选框和按钮:

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

控制器中的第二件事:

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

    ... 
    something
    ...
}
Run Code Online (Sandbox Code Playgroud)

它实际上是有效的,但是:

如果没有选中复选框,我收到空(不打扰我).

如果选中复选框,我将收到"打开" FormCollection,这不是我需要的.我想收到真假.

我怎样才能做到这一点?

Tus*_*har 28

<input type="checkbox" name="showAll" id="showAll">Include completed
Run Code Online (Sandbox Code Playgroud)

将发布值"on""off".

这个WONT绑定到一个布尔值,

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

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

更新:

如果选中,则html帮助程序将回发"true,false",如果未选中,则为"false"

您可以将此解决方法作为

bool MyBoolValue= Convert.ToBoolean(collection["showAll"].Split(',')[0]);
Run Code Online (Sandbox Code Playgroud)

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


Mne*_*emo 6

我已经尝试使用输入标签,它的工作原理如下:

<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>
Run Code Online (Sandbox Code Playgroud)

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

bool rmbMe = (formdata["chkRmb"] ?? "").Equals("on", StringComparison.CurrentCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)