IE と ASP.NET MVC 4 データ注釈に非常に奇妙な問題があります。
それらのいくつかは、IE(8/7標準モードの9および9)でのみ最初のページロードでサーバー側のエラーメッセージを表示しているようです。影響を受けるのはいくつかの StringLength と RegularExpression のようですが、メッセージが表示されていない Required などの他のデータ注釈があるわけではありません。
検証メッセージがクライアント側に挿入される方法をカスタマイズしたので、それらは間違いなくサーバー側のエラーです。
なぜこれが起こるのか誰にも分かりますか?私は完全に混乱しています。
アクション メソッドで 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 行あり、匿名化する時間がありません。検証に失敗していると思われるテキスト ボックスの 1 つのスニペットを次に示します。
<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>
}