如何从 FormCollection 中获取复选框的值?
How to get checkbox value from FormCollection?
我有一个复选框和按钮:
@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
收到 "on",这不是我需要的。我想收到真假。
我该怎么做?
<input type="checkbox" name="showAll" id="showAll">Include completed
将 Post 设为 "on"
或 "off"
的值。
这不会绑定到布尔值,
要接收布尔值,您可以使用 HTML Helper Checkbox
喜欢
@Html.CheckBox("showAll")
<label for="showAll" style="display:inline">Include completed</label>
更新:
If checked the html helper will post back "true,false"
and if
unchecked as "false"
您可以将此解决方法作为
bool MyBoolValue= Convert.ToBoolean(collection["showAll"].Split(',')[0]);
这是因为 Html 助手 class 添加了一个额外的 hidden
字段来保存复选框的状态
我无法让它工作,这是我想出的解决方案。我用 html 助手来展示它。
@Html.CheckBoxFor(model => model.showAll, new { @class = "form-control", Name = "showAll"})
这是我一直摔倒的地方,下面的作品。
bool MyBoolValue= (collection["showAll"] ?? "").Equals("true", StringComparison.CurrentCultureIgnoreCase);
我已经尝试使用输入标签,它的工作原理如下所示:
<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);
所以我试了一下,看起来很高兴接受它,其中集合是我的 FormCollection 对象:
if (collection.AllKeys.Contains("Inactive"))
{
np.Inactive = false;
}
else
{
np.Inactive = true;
}
请注意,目标元素的名称令人困惑 - 但这是我想要的结果。
试试这个,它为我解决了同样的问题。我想我会分享它以防其他人将来遇到这个问题。
[HttpPost]
public ActionResult Index(FormCollection collection)
{
Boolean tempValue = collection["showAll"] != null ? true : false;
TempData["showAll"] = tempValue;
...
something
...
}
试试这个
bool MyBoolValue= collection["showAll"].Count > 1;
当 1 则为 false
当 2 为真时
我有一个复选框和按钮:
@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
收到 "on",这不是我需要的。我想收到真假。
我该怎么做?
<input type="checkbox" name="showAll" id="showAll">Include completed
将 Post 设为 "on"
或 "off"
的值。
这不会绑定到布尔值,
要接收布尔值,您可以使用 HTML Helper Checkbox 喜欢
@Html.CheckBox("showAll")
<label for="showAll" style="display:inline">Include completed</label>
更新:
If checked the html helper will post back
"true,false"
and if unchecked as"false"
您可以将此解决方法作为
bool MyBoolValue= Convert.ToBoolean(collection["showAll"].Split(',')[0]);
这是因为 Html 助手 class 添加了一个额外的 hidden
字段来保存复选框的状态
我无法让它工作,这是我想出的解决方案。我用 html 助手来展示它。
@Html.CheckBoxFor(model => model.showAll, new { @class = "form-control", Name = "showAll"})
这是我一直摔倒的地方,下面的作品。
bool MyBoolValue= (collection["showAll"] ?? "").Equals("true", StringComparison.CurrentCultureIgnoreCase);
我已经尝试使用输入标签,它的工作原理如下所示:
<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);
所以我试了一下,看起来很高兴接受它,其中集合是我的 FormCollection 对象:
if (collection.AllKeys.Contains("Inactive"))
{
np.Inactive = false;
}
else
{
np.Inactive = true;
}
请注意,目标元素的名称令人困惑 - 但这是我想要的结果。
试试这个,它为我解决了同样的问题。我想我会分享它以防其他人将来遇到这个问题。
[HttpPost]
public ActionResult Index(FormCollection collection)
{
Boolean tempValue = collection["showAll"] != null ? true : false;
TempData["showAll"] = tempValue;
...
something
...
}
试试这个
bool MyBoolValue= collection["showAll"].Count > 1;
当 1 则为 false
当 2 为真时