我不确定它是否是预期的行为,但是当我使用@Html.CheckBoxFor(x => x.CheckBox1)
时,它将输出两个输入字段(其中一个是假的,一个是真的,因为html不回发错误的复选框)。但实际呈现的html是:
<input id="CheckBox1" name="CheckBox1" type="checkbox" value="true">
<input name="CheckBox1" type="hidden" value="false">
但是当我使用@Html.HiddenFor(x => x.CheckBox2)
时,输出是:
<input id="CheckBox2" name="CheckBox2" type="hidden" value="True">
请注意'true'
和'True'
。当开箱即用的jquery.validate.js尝试使用equalTo函数时,它永远不会彼此相等,因为'true' !== 'True'
。
为了解决这个问题,我可以修改equalTo方法以在比较复选框值时忽略大小写,但我只是好奇这是否是MVC框架的错误或者这是预期的行为?
这是一个重现问题的小提琴(查看输出查看html的源代码):https://dotnetfiddle.net/LxOm3J
编辑1: 我在CheckBoxFor源中发现它在构建Checkbox时传递小写'true'。问题仍然存在,为什么小案而不是适当的案例。 https://www.symbolsource.org/Public/Metadata/NuGet/Project/Microsoft.AspNet.Mvc/4.0.20710.0/Release/.NETFramework,Version=v4.0/System.Web.Mvc/System.Web.Mvc/System.Web.Mvc/Html/InputExtensions.cs来源的第96行。