复选框不使用布尔viewmodel属性

Bla*_*ell 14 c# asp.net asp.net-mvc razor asp.net-core-mvc

我正在使用MVC6并在我的表单中有一个复选框输入字段,但是当提交表单时,复选框的值总是作为false传递给ViewModel:

以下是在我的ViewModel中声明属性的方式:

[Display(Name = "Include Sales Tax")]
public bool IncludeSalesTax { get; set; }
Run Code Online (Sandbox Code Playgroud)

以下是我的MVC6剃刀形式的表单:

<div class="form-group">
    <div class="checkbox">
        <label><input asp-for="IncludeSalesTax" type="checkbox" value="">@Html.DisplayNameFor(m => m.IncludeSalesTax)</label>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我认为以上将是遵循Twitter Bootstrap标准并使用ASP.NET MVC6 asp-for标签进行模型绑定的最佳方式.

当我提交表单时,IncludeSalesTax的值总是为false,即使在选中时也是如此.我究竟做错了什么?

pin*_*nki 29

如果设置了输入类型复选框,则发送"打开".否则不会发送.重要的是,将value属性设置为true.在这种情况下,它发送true或nothing,这是完美的绑定到布尔值.

<input type="checkbox" name="yourPropertyName" value="true" checked />
Run Code Online (Sandbox Code Playgroud)


小智 9

如果复选框应默认为选中状态,则上面 Pinki 的回答很好。

如果复选框默认为未选中状态,则在单击时,一些内嵌 javascript 会将值设置为 true 或 false:

<input name="yourPropertyName" type="checkbox" value="false" onchange="this.value=this.checked">
Run Code Online (Sandbox Code Playgroud)


Zir*_*tee 8

剃刀视图引擎通常使用相同的名称创建一个复选框和一个隐藏的输入.

您只需使用下面的html即可确保获得所需的结果:

<div class="form-group">
        <div class="checkbox">     
    <input type="checkbox" value="true" name="IncludeSalesTax" />Include Sales Tax
    <input type="hidden" value="false" name="IncludeSalesTax" />
        </div>
    </div> 
Run Code Online (Sandbox Code Playgroud)


Bla*_*ell 5

让Visual Studio根据我的ViewModel生成表单后,它是如何执行此操作的:

        <div class="checkbox">
            <input asp-for="isTaxable" />
            <label asp-for="isTaxable"></label>
        </div>
Run Code Online (Sandbox Code Playgroud)

此外,我没有关闭输入标签。因此也可以这样完成,这是引导程序的首选方式:

<label><input asp-for="isTaxable" type="checkbox" value=""/>@Html.DisplayNameFor(m => m.isTaxable)</label>
Run Code Online (Sandbox Code Playgroud)