我对 IE 和 ASP.NET MVC 4 数据注释有一个非常奇怪的问题。
其中一些似乎仅在 IE 中(8/7 标准模式下的 9 和 9)在初始页面加载时显示其服务器端错误消息。受影响的似乎是一些 StringLength 和 RegularExpression,但并非所有我都有其他数据注释,例如必需的,它们没有显示它们的消息。
我已经自定义了如何在客户端插入验证消息,因此它们肯定是服务器端错误。
有谁知道为什么会发生这种情况?我完全糊涂了。
我曾尝试在我的操作方法中调用 ModelState.Clear() 但这似乎无法解决问题..
我正在使用 PRG 模式,但呈现我的表单的 G 部分是子操作,这可能是问题吗?
回应评论的代码:
public ActionResult MyForm()
{
var cp = GetComponentPresentation();
var model = new MyFormModel(cp);
model.ComponentId = cp.Component.Id;
LoadModel(model);
return PresentationView(model);
}
private void LoadModel(MyFormModel model)
{
string titleTypesTcmId = ConfigHelper.TitleTypesKeywordId.FormatWith(ConfigHelper.PublicationId);
model.TitleKeywords = TaxonomyService.GetTaxonomyKeywordChildrenNames(titleTypesTcmId)
.Select(x => new SelectListItem() { Text = x, Value = x }).ToList();
}
View Html 是 250 行,我没有时间匿名。所以这里是一个似乎未能通过验证的文本框的片段。
<div class="row">
@using (Html.BeginForm("MyForm", "MyFormController", FormMethod.Post, new { id = "MyForm", @class = "form ajax", data_ajax_error=Html.GetPlainTextValue(Model.Component, "error_message") }))
{
<input type="hidden" name="ComponentId" value="@Model.Component.Id"/>
<fieldset class="paddingright">
<legend>Your Details</legend>
<div class="row field">
@Html.LabelForRequired(m => m.NationalInsuranceNumber, Html.Resource("Labels_Form_NINumber"))
@Html.TextBoxFor(m => m.NationalInsuranceNumber, new { placeholder=Html.Resource("Placeholder_Form_NINumber") })
@Html.ValidationMessageFor(m => m.NationalInsuranceNumber, null, new { @class = "error"})
</div>
<!-- SNIP -->
<div class="submit-container no-js-hidden">
<button type="submit" value="Step2" class="btn-green customsubmit" name="FormButton">
<span class="content">Next step ></span>
</button>
</div>
</fieldset>
}