我有一个复选框和按钮:
@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
的“开启”,这不是我需要的。我想收到真假。
我该怎么做?
答案 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
...
}