获得MVC CheckBox的两种状态

时间:2014-09-14 18:49:35

标签: c# asp.net-mvc

enter image description here 在帖子上阅读表单集时,我被困在一个非常基本的页面中。 当我检查IsChecked复选框时,在post动作中。我在FormCollection中得到"true, false"。我的目标是在下面的代码中获取字符串,然后将其解析为boolean。

我不知道这个错误在哪里,你能帮忙吗?

enter image description here

发布行动:

[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>
<% } %>

1 个答案:

答案 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