0

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

1 回答 1

0

不管我怎么想,这实际上是客户端的事情。

这是由于我的 IE 占位符后备脚本触发了文本框上的“更改”,导致在加载验证脚本时触发验证,这导致了一些非常奇怪的结果。

于 2013-01-16T01:07:10.313 回答