我在局部视图中有一个Ajax.BeginForm(),其中包含一个bool值的CheckBox。该模型如下;
public class ViewBusinessAdd
{
[Required(ErrorMessage="Name must be supplied")]
[Display(Name = "Business Name")]
public string Name { get; set; }
[Required(ErrorMessage = "Contact must be supplied")]
[Display(Name = "Business Contact")]
public string Contact { get; set; }
[Display(Name = "Phone Number")]
public string Number { get; set; }
public string Postcode { get; set; }
public Dictionary<string, string> States { get; set; }
public string AddressRegion { get; set; }
public bool IsFacebookPost { get; set; }
public List<RecommendationViewAttribute> Attributes { get; set; }
}
使用Html帮助程序呈现CheckBox;
<div class="control-group">
<label class="control-label">
@Html.LabelFor(m => m.IsFacebookPost, "Post recommendation")
<img src="~/Content/images/f_logo.png" alt="Facebook" />
</label>
<div class="controls">
@Html.CheckBoxFor(m => m.IsFacebookPost)
</div>
</div>
渲染时会产生以下HTML;
<input data-val="true" data-val-required="The IsFacebookPost field is required." id="IsFacebookPost" name="IsFacebookPost" type="checkbox" value="true" /><input name="IsFacebookPost" type="hidden" value="false" />
提交表单时,会在Chrome中生成此错误;
未捕获的SyntaxError:意外的令牌u
如果我删除了CheckBox,表单提交时没有任何错误。如果我将其转换为非Ajax表单,它也会提交,但不幸的是,这不适用于页面设计。
我对此非常感到困惑 - 我甚至将其更改为RadioButton并且存在相同的行为。有没有人有任何想法?
编辑:忘记添加它是一个Javascript错误。
编辑:错误来自下面返回的jQuery库;
parseJSON:function(data){ //首先尝试使用本机JSON解析器进行解析
if ( window.JSON && window.JSON.parse ) { return window.JSON.parse( data ); }
但是只有在我使用Razor HTML帮助程序生成复选框时才会发生这种情况。
答案 0 :(得分:2)
我对此感到厌烦并且大约花了6个小时试图找出问题所在。根据Jquery开发人员的说法,这是1.9.1中的预期行为。如果您使用jQuery Migrate 1.1.1插件,除了我认为可以关闭的控制台警告之外,一切都应该有效。
http://bugs.jquery.com/ticket/13412
查看错误报告,这实际上不是一个错误:)
答案 1 :(得分:1)
好吧,似乎jQuery 1.9.1引入了一个错误。我已经降级到1.8.3,而Checkbox的Razor助手现在可以正常工作了。如果有人有兴趣,降级的步骤;
卸载 - 打包jQuery -force
Install-Package jQuery -version 1.8.3