web-dev-qa-db-ja.com

FormCollectionからチェックボックス値を取得するにはどうすればよいですか?

チェックボックスとボタンがあります:

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

コントローラーの2番目のもの:

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

    ... 
    something
    ...
}

それは実際に機能していますが、:

チェックボックスがチェックされていない場合、私はnullを受け取ります(あまり気になりません)。

チェックボックスがオンになっている場合、FormCollectionから「オン」を受信して​​いますが、これは必要なものではありません。真か偽かを受け取りたい。

これどうやってするの?

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

"on"または"off"の値を投稿します。

このWONTはブール値にバインドします

ブール値を受け取るには、HTML Helper CheckboxLikeを使用できます。

@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フィールドを追加するためです。

28
Tushar

だから私はこれにショットを与えました、そしてそれを撮ることは幸せであるように見えました、ここでコレクションは私のFormCollectionオブジェクトです:

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

ターゲット要素の名前がわかりにくいことをご承知おきください。ただし、これは私が求めていた意図した結果でした。

2
Jeff

入力タグを試してみましたが、次のように機能します。

<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);
2
Mnemo

私はこれを機能させるのに苦労しました、そしてこれは私が思いついた解決策です。私はそれをhtmlヘルパーで示しています。

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

これは私が転倒し続けた場所であり、次の作業が行われます。

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

これを試してみてください、それは私にとってこれと同じ問題を解決しました。将来、他の人がこの問題に遭遇した場合に備えて、共有したいと思いました。

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

    ... 
    something
    ...
}
1
JasonG