我有一个非常奇怪的情况,我从一个复选框向我的控制器发布一个值,即使在选中时也不是这样!
我的viewModel的一部分:
public class BeslutIStortViewDTO
{
public BeslutIStortDTO BeslutIStort { get; set; }
public BeslutIStortListorDTO SelectListor { get; set; }
}
public class BeslutIStortDTO
{
public int id { get; set; }
public bool Ok { get; set; }
... other stuff
}
我的观点的一部分:
<div id="colOk" class="kolumn_header">
@Html.LabelFor(model => model.BeslutIStort.Ok)
@Html.CheckBoxFor(model => model.BeslutIStort.Ok, new { @class = "rensa", tabindex = 5 })
</div>
在传递给控制器的字符串中,当未选中该框时,一切似乎都正常:
BeslutIStort.Ok=false
BUT!当我检查它时:
BeslutIStort.Ok=&BeslutIStort.Ok=false
在字符串中有两次,第一次没有值,oterh是false
,所以两者都错了。我当然希望只有一个,那个是true
。
另一个有趣的发现是,在真实渲染的html中,复选框看起来像这样:
<input class="rensa" id="BeslutIStort_Ok" name="BeslutIStort.Ok" tabindex="5" type="checkbox" value="true" /><input name="BeslutIStort.Ok" type="hidden" value="false" />
它有一个隐藏的领域!
当我发布到服务器的值时,我用ajax做,并且data参数定义如下:
data: $("#BisData").serialize(),
我希望有人能帮助我解释一下这个问题,并帮助我对我的控制器说“真实”: - )
=== S O L V E D === 当它结束时,我有这样的javascript:
$( “rensa。 ”)VAL(“。”);
这使得复选框无法正常运行。我补充说:
$(“。rensaCheckbox”)。attr(“checked”,false);
对于复选框,现在它可以正常工作。
答案 0 :(得分:1)
它也不奇怪......
首先,你已经两次收到价值BeslutIStort.Ok=&BeslutIStort.Ok=false
因为当您使用@Html.CheckboxFor()
时,Razor引擎会自动在表单中放置一个名称和值为false的隐藏字段
这样做是为了即使未选中复选框,也会返回false
值
第二...你正在接受空值,因为你的输入(复选框)html控件没有值。如果你想要返回一个值,只需添加一个代码为
<div id="colOk" class="kolumn_header">
@Html.LabelFor(model => model.BeslutIStort.Ok)
@Html.CheckBoxFor(model => model.BeslutIStort.Ok, new { @class = "rensa", tabindex = 5,value="true" })
</div>