Как запустить ASP.NET Основная проверка на стороне клиента с помощью JavaScript

#javascript #asp.net #asp.net-mvc #asp.net-core #razor-pages

#javascript #asp.net #asp.net-mvc #asp.net-core #razor-страницы

Вопрос:

Есть ли какой-либо способ запустить ASP.NET Основная проверка на стороне клиента с помощью JavaScript?

У меня есть страница Razor Pages с a <form> , которая включает в себя такой контент:

 <div class="row">
    <div class="col-md-6">
        <label asp-for="LocationModel.Location" class="control-label"></label>
        <input asp-for="LocationModel.Location" class="form-control" />
        <span asp-validation-for="LocationModel.Location" class="text-danger"></span>
    </div>
    <div class="col-md-6">
        <label asp-for="LocationModel.LoadsPerMonth" class="control-label"></label>
        <input asp-for="LocationModel.LoadsPerMonth" class="form-control" />
        <span asp-validation-for="LocationModel.LoadsPerMonth" class="text-danger"></span>
    </div>
</div>
  

Если я отправляю форму, все ошибки проверки выделяются и отображаются. Есть ли какой-нибудь способ запустить это из JavaScript?

На самом деле я не отправляю форму на сервер. Я просто хочу использовать значения в JavaScript. Но я бы хотел использовать ASP.NET Проверка ядра, если смогу. Я вижу, что могу просто задать текст проверки <span> . Возможно, я мог бы это сделать, если бы знал, как сделать границу элемента управления красной так, как это делает проверка.

Я нашел несколько примеров, которые делают это, но не для ASP.NET Основные страницы или страницы Razor.

Ответ №1:

Вы можете сделать это с помощью ненавязчивой проверки. Для этого вам необходимо включить частичное представление, которое отображает ненавязчивые сценарии проверки jQuery. Для этого добавьте следующее в нижней части вашего представления:

 @section Scripts {
    // You can find the partial in ~/Views/Shared
    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}
  

Далее, в качестве глупого примера проверки формы из JavaScript при загрузке, вы можете добавить a script в тот же Scripts раздел под включением частичного:

 @section Scripts {
    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
    <script type="text/javascript">
        $(function () {
            $('#formID').validate();

            if ($('#formID').valid() === true) {
                console.log("valid");
            } else {
                console.log("invalid");
            }
        });
    </script>
}
  

Обновление для комментариев

 @model SiteViewModel

<form asp-action="Index" id="formID" method="post">
    <input asp-for="Name" />
    <span asp-validation-for="Name"></span>
    <input type="submit" />
</form>

@section Scripts {
    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
    <script type="text/javascript">
        $(function () {
            $('#formID').validate();

            if ($('#formID').valid() === false) {
                console.log("invalid");
            } else {
                console.log("valid!");
            }
        });
    </script>
}
  

где SiteViewModel просто:

 public class SiteViewModel
{
    [Required]
    public string Name { get; set; }
}
  

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

1. Я уже включаю _ValidationScriptsPartial , но чего-то не хватает. Если я добавлю кнопку отправки и нажму на нее, во всех моих полях проверки появятся ошибки. Но этого не произойдет, если я позвоню $('#myform').validate() .

2. Странно. Я переместил ссылку _ValidationScriptsPartial на другой JavaScript, как у вас, но по-прежнему не отображаются ошибки.

3. Да, я только что попробовал одноуровневое поле и получил тот же результат.

4. Я должен отойти. Я ценю ваш ответ до сих пор. Если это работает для вас, это должно быть правильно. Но что-то не так. Возможно, вы могли бы опубликовать результирующую разметку (перед вызовом validate() )?

5. Интересно, может ли это иметь какое-либо отношение к тому факту, что вы используете MVC, а я использую страницы Razor. В любом случае, я буду копать глубже, когда вернусь. Вот почему я подумал, может ли ваш созданный HTML отличаться.

Ответ №2:

В последних приложениях .Net Core вы найдете _ValidationScriptsPartial.cshtml файл внутри Shared папки. Используйте его в самом конце views (.cshtml) после того, как все теги закрыты для проверки на стороне клиента

 @section Scripts{
    @{
       <partial name="_ValidationScriptsPartial"/>
    }
}