如果 jQuery Mobile 的问题确实是 HTML 标记的重复名称,那么您必须input type=checkbox
在 HTML 中呈现您自己的标记,因为 ASP.NET MVCHtml.CheckBoxFor
帮助器方法将呈现input type=hidden
具有重复名称值的标记。请参阅此帖子进行讨论。
隐藏的表单标签在那里,因为如果您向服务器提交未选中的复选框,则该字段的表单值不包括在内。因此包含一个隐藏input
标签,value=false
因此如果未选中该复选框,false
则仍会提交该值。MVC 中的模型绑定过程将为您过滤掉重复的表单值,但如果您遇到重复名称属性的客户端问题,则必须在 HTML 中呈现您自己的复选框和标签,然后处理事实上,HandicapSession.WinByTwo
当未选中该框时,不会为该属性提交任何值。如果没有HandicapSession
提交其他属性,则整个对象将为空。
因此,您可以手动创建复选框输入并仍然根据需要从模型中加载checked
和value
属性,但您可能会遇到模型绑定问题,即使选中该框,WinByTwo 的值仍然为 false。
另请注意,for
您的属性label
与示例中复选框的 ID 不匹配。你需要完整的HandicapSession_WinByTwo
.
以下手动创建输入标签:
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.css" />
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js"></script>
<div data-role="page">
<div data-role="content">
<div data-role="fieldcontain">
<fieldset data-role="controlgroup">
<legend>End Game:</legend>
<input type="checkbox" id="HandicapSession_WinByTwo" name="HandicapSession.WinByTwo" @(Model.HandicapSession.WinByTwo ? "checked=checked" : "") value="@(Model.HandicapSession.WinByTwo.ToString().ToLower())" />
<label for="HandicapSession_WinByTwo">Win By Two?</label>
</fieldset>
</div>
</div>
</div>
加载时选中的复选框的 HTML 输出如下:
<div data-role="page">
<div data-role="content">
<div data-role="fieldcontain">
<fieldset data-role="controlgroup">
<legend>End Game:</legend>
<input type="checkbox" id="HandicapSession_WinByTwo" name="HandicapSession.WinByTwo" checked=checked value="true" />
<label for="HandicapSession_WinByTwo">Win By Two?</label>
</fieldset>
</div>
</div>
</div>
最好的办法就是使用 MVC 辅助方法,所以我不确定您是否尝试过以下方法。默认Html.CheckBoxFor
和Html.LabelFor
辅助方法适用于 jQuery Mobile 1.0a4.1 或 1.1.0 就好了。以下对我有用:
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.css" />
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js"></script>
<div data-role="page">
<div data-role="content">
@using (Html.BeginForm())
{
<div data-role="fieldcontain">
<fieldset data-role="controlgroup">
<legend>End Game:</legend>
@Html.CheckBoxFor(m => m.HandicapSession.WinByTwo)
@Html.LabelFor(m => m.HandicapSession.WinByTwo, "Win By Two?")
<input type="submit" id="SubmitForm" value="submit" />
</fieldset>
</div>
}
</div>
</div>
这将产生 HTML 输出:
<div data-role="page">
<div data-role="content">
<form action="/Mobile/Mobile" method="post">
<div data-role="fieldcontain">
<fieldset data-role="controlgroup">
<legend>End Game:</legend>
<input checked="checked" data-val="true" data-val-required="The WinByTwo field is required." id="HandicapSession_WinByTwo" name="HandicapSession.WinByTwo" type="checkbox" value="true" />
<input name="HandicapSession.WinByTwo" type="hidden" value="false" />
<label for="HandicapSession_WinByTwo">Win By Two?</label>
<input type="submit" id="SubmitForm" value="submit" />
</fieldset>
</div>
</form>
</div>
</div>