在帖子上阅读表单集时,我被困在一个非常基本的页面中。
当我检查IsChecked复选框时,在post动作中。我在FormCollection中得到"true, false"
。我的目标是在下面的代码中获取字符串,然后将其解析为boolean。
我不知道这个错误在哪里,你能帮忙吗?
发布行动:
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
var checkedd = collection["IsChecked"].ToString();
var name = collection["Name"].ToString();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
型号:
public class Product
{
public bool IsChecked { get; set; }
[Required]
public string Name { get; set; }
}
查看:
<% using (Html.BeginForm()) { %>
<%: Html.AntiForgeryToken() %>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Product</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.IsChecked) %>
</div>
<div class="editor-field">
<%: Html.CheckBoxFor(model => model.IsChecked) %>
<%: Html.ValidationMessageFor(model => model.IsChecked) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Name) %>
</div>
<div class="editor-field">
<%: Html.EditorFor(model => model.Name) %>
<%: Html.ValidationMessageFor(model => model.Name) %>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
答案 0 :(得分:1)
由于您将模型传递给您查看,为什么使用FormCollection
?如果你把POST方法改为
[HttpPost]
public ActionResult Create(Product model)
{
你的模型将被正确绑定。
您获得IsChecked
此值的原因是CheckBoxFor
帮助程序呈现了2个控件 - <input type="checkbox" ..>
和<input type="hidden" ...>
。
因为未选中的复选框不会回发,所以第二个隐藏的输入 确保在未选中时返回false值。该 default model binder读取与属性名称匹配的第一个值 和(忽略第二个,如果它存在)。
如果你真的想使用FormCollection
,那就不要使用CheckBoxFor
- 只需手动输入html作为复选框即可。然后,如果FormCollection
中存在该值,则该值必须为true
,否则必须为false