Кнопка отправки формы в MVC3 / Razor не работает в Internet Explorer - PullRequest
1 голос
/ 23 января 2012

У меня есть форма, написанная на ASP.NET MVC3 / Razor.Публикация формы отлично работает в Firefox и Chrome, но по какой-то причине в Internet Explorer кнопка «Отправить» не отвечает.

Чтобы быть понятным, если какие-либо проверки полей на стороне клиента не пройдены, сообщения проверкиотображается как ожидалось.Но модель представления реализует IValidatableObject и переопределяет Validate(), и, если данные должны вызвать нарушение правил проверки, сообщение об ошибке не отображается.Это заставляет меня поверить, что никакой обратной передачи вообще не происходит.

Есть идеи, почему IE будет вести себя таким образом?

РЕДАКТИРОВАТЬ: Фрагмент кода (выглядит довольно многомельница, нет?):

@model MyModel
...
@using (Html.BeginForm("SaveMyForm", "Home")) {
<fieldset>
  ...
  <input type="submit" value="Save" class="submit" />
</fieldset>
}

Ответы [ 3 ]

2 голосов
/ 24 января 2012

Отследил это, закомментировав разделы кода страницы и посмотрев, что нужно закомментировать, прежде чем форма заработает.

Ответом было скрытое поле типа char, которое не было инициализировано и все еще имело начальное значение (char)0. Сгенерированный источник HTML был:

<input data-val="true" data-val-required="The MyChar field is required." id="MyChar" name="MyChar" type="hidden" value="" />

Я сравнил с Chrome, и там источник HTML был таким же, за исключением:

value="�"

Это, очевидно, значение "char zero". По-видимому, IE переворачивается, когда получает char 0, и просто обрезает его до пустого значения, а затем правило проверки на стороне клиента, которому требуется MyChar, чтобы иметь значение, вызывает ошибку обратной передачи, и нет места для отображения сообщения об ошибке, так как это в любом случае скрытое поле!

(Примечание в скобках: я нигде не украшал это поле атрибутом [Required], поэтому не знаю, почему html генерирует «обязательный» валидатор, особенно если это скрытое поле!)

0 голосов
/ 04 июня 2014

Убедитесь, что у вас есть сценарии в нижней части

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
0 голосов
/ 22 августа 2012

Если у вас есть настраиваемое поле в модели, которое используется в @Html.HiddenFor, но не определено в классе, оно будет отображать страницу, но submit / post не будет работать.

@Html.HiddenFor(model => model.appUser.UserType)

Проверьте все свойства модели и убедитесь, что они определены классом модели.

...