asp.net复选框在表单post post to action方法中始终为false

时间:2014-02-25 08:26:15

标签: asp.net asp.net-mvc html5 checkbox asp.net-mvc-5

我有一个带有复选框的表单:

 @using (Html.BeginForm("Edit", "Services", FormMethod.Post, new { @class = "stdform", role = "form" }))
{
     <p>
    <label>@Html.LabelFor(model => model.enabled)</label>
    <span class="field">
        <input type="checkbox" name="Enabled" id="Enabled" value="@Html.ValueFor(model => model.enabled)" />
    </span>
    <small class="desc">If the service is enabled.</small>
</p>
    <p class="stdformbutton">
    <button class="submit radius2">Submit</button>
    <input type="reset" class="reset radius2" value="Reset Form" />
</p>
 }

现在,当我将表单提交给我的操作方法时:

 [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(ServicesViewModelEdit model)
    {
    }

我的model.enabled总是= false;

为什么会这样?

这是我的观点模型:

public class ServicesViewModelEdit
{
    //public Service Service { get; set; }

    [Key]
    [Required]
    public int Id { get; set; }

    [Required]
    public ServiceTypes ServiceType { get; set; }

    [Required]
    public String IpAddress { get; set; }

    [Required]
    public int Port { get; set; }

    [Required]
    public String Name { get; set; }

    public String Description { get; set; }

    public String Location { get; set; }

    [Required]
    public int PollInterval { get; set; }

    [Required]
    public int FailCount { get; set; }

    public bool enabled { get; set; }

    public List<ServiceTypes> ServiceTypes { get; set; }

}

4 个答案:

答案 0 :(得分:1)

SWhy没有使用以下?:

@Html.CheckBox("enabled", new { @style = "margin: 3px 10px 0;" })

这对我来说很好......

答案 1 :(得分:0)

看起来它没有将复选框的值绑定到模型中的enabled属性,因此该属性只是被设置为默认值。在viewmodel中将enabled属性的第一个字母大写为Enabled,以便它与您的复选框输入的name属性匹配,它应该可以正常工作。

答案 2 :(得分:0)

作为替代方案;您可以使用@Html.CheckBoxFor(model => model.enabled),这将非常容易使用和读取,就像您已经为标签

一样

答案 3 :(得分:0)

您必须在帖子中再次将模型传递给视图,因此请将帖子中的视图更改为此

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(ServicesViewModelEdit model)
{
    return View(model);
}