【发布时间】:2019-08-09 16:06:24
【问题描述】:
我正在使用一个复选框来处理允许订购功能,它会生成下面的 HTML 代码:
@using (Html.BeginForm("EditFarm", "CustomerManagement", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.AllowOrder)
<div>
<label for="allowOrder">Allow Ordering</label>
<br />
<input type="checkbox" id="allowOrder" name="AllowOrder" value="true" @(Model.AllowOrder ? "checked" : "") />
</div>
....
}
问题是复选框AllowerOrder 总是将true 值传递给控制器,即使它是unchecked
这是控制器中的代码:
public ActionResult EditFarm([Bind(Include = "Id, ERPCustomerCode, ERPId, CategoryId, Size, Large, OtherId, AllowOrder")] NewFarm farm)
{
...
}
尝试调试,收到的模型总是有AllowerOrder = true。
我的代码有问题吗?任何帮助,将不胜感激! 谢谢!
【问题讨论】:
-
在 Yauhen 的评论之上,您的复选框似乎没有绑定到
AllowOrder。这个更有可能绑定到它:@Html.HiddenFor(model => model.AllowOrder) -
你应该使用
@Html.CheckboxFor。检查here -
很可能
@Html.HiddenFor(model => model.AllowOrder)会覆盖复选框值,因为它会生成<input type="hidden" name="AllowOrder" />。请注意,这两个元素具有相同的name属性。 -
我推荐使用
@Html.CheckBoxFor,什么东西不起作用?这与checked属性有关吗?我认为仅将name属性与input元素结合不足以绑定viewmodel 属性的复选框值。 -
同意@TetsuyaYamamoto,a。删除 @Html.HiddenFor(model => model.AllowOrder) b。使用@Html.CheckBoxFor 而不是
<input type="checkbox" id="allowOrder" name="AllowOrder" value="true" @(Model.AllowOrder ? "checked" : "") />
标签: c# html asp.net-mvc checkbox