0

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 &gt;</span>
                   </button>
                </div>
             </fieldset>
     }
4

1 に答える 1

0

これは実際にはクライアント側の問題であり、私が考えていたことに反して.

これは、IE プレースホルダー フォールバック スクリプトがテキスト ボックスで「変更」をトリガーし、検証スクリプトの読み込み中に検証が起動し、非常に奇妙な結果を引き起こしたことが原因でした。

于 2013-01-16T01:07:10.313 に答える