проверка на стороне клиента. Запретить публикацию формы

#c# #javascript #jquery #asp.net-mvc

#c# #javascript #jquery — jquery — запрос #asp.net-mvc #jquery

Вопрос:

В моей форме есть несколько текстовых полей. Работает ненавязчивая проверка jquery, которая делает поля красными, когда вводятся недопустимые значения. Однако, когда я нажимаю, чтобы отправить форму, форма отправляется обратно на сервер. почему?

Это потому, что текстовые поля не соответствуют модели, объявленной в верхней части представления?

Как я могу предотвратить публикацию формы?

     @model Dictionary<Project, List<ProjectActualCapacity>>


@{
    var model = Model.ToList();
}


@using (Html.BeginForm("ProjectActualCapacityIndex", "Project", FormMethod.Post))
{
    <hr />
    @Html.ValidationSummary(true)
@for (int i = 0; i < model.Count(); i  )
{
    <tr>
        <td>
            @Html.DisplayFor(r => model[i].Key.Name)
        </td>
        @for (int j = 0; j < 12; j  )
        {
            {
                <td>
                    @Html.TextBoxFor(r => model[i].Value[j].Hours, new { @class = "form-control input-sm text-right" })
                    @Html.HiddenFor(r => model[i].Value[j].ID)
                </td>
            }
            @Html.HiddenFor(r => model[i].Key.ID)
        }

    </tr>
}

<input type="submit" value="Set Values" class="btn btn-default" />
  

}

Комментарии:

1. достаточно просто включить текстовые поля внутри формы.

2. Был бы полезен некоторый пример кода

Ответ №1:

Убедитесь, что в вашем web.config включены CliventValidationEnabled и UnobstrusiveJavaScriptEnabled, см. Ниже.

 <appSettings>
  <add key="ClientValidationEnabled" value="true" />
  <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
  

Ответ №2:

 <form action="..." onsubmit="return validateForm()" method="...">
...
<input type="submit" value="Submit">
</form>
  

Вы можете попробовать приведенный выше код для своей формы. Метод validateForm должен возвращать значение true для отправки формы, и если он возвращает значение false, форма не будет отправлена.

Ответ №3:

Добавление

  onclientclick="return false;"
  

на кнопку следует прекратить публикацию (всегда, вам нужно добавить сюда свою логику, чтобы сделать необязательной) с помощью

  usesubmitbehaviour="false"
  

опция. Также enablevalidation=»false» должно нарушить это.