Проверка на стороне клиента .netcore для различных обработчиков onPost (несколько событий) - PullRequest
0 голосов
/ 25 апреля 2020

В моем проекте страницы бритвы .nercore у меня есть несколько форм с несколькими обработчиками onPost - разными кнопками для разных событий (например, добавление / копирование / редактирование / удаление)

Моя проблема - у меня нет понять, как я могу дифференцировать проверку на стороне клиента в зависимости от нажатой кнопки.

РЕДАКТИРОВАТЬ

Предположим, у меня есть следующий .cs html, который определяет два ввода поля данных и две кнопки. При нажатии одной кнопки (Добавить) первое поле A должно быть проверено, при нажатии второго (копия) - еще одного (поле B):

@page "{id:int}/{modeR:int}"
@model MyProject.Pages.MyProjectDB.AddRecordModel
@{
ViewData["Title"] = "Add Record";
}

<div class="row">
    <div class="col-md-7">
        <form method="post" enctype="multipart/form-data">
            <div class="form-group">
                <label asp-for="myClass.FieldA" class="control-label"></label>
                <input asp-for="myClass.FieldA" class="form-control" />
                <span asp-validation-for="myClass.FieldA" class="text-danger"></span>
            </div>  
            <div class="form-group">
                <label asp-for="myClass.FieldB" class="control-label"></label>
                <input asp-for="myClass.FieldB" class="form-control" />
                <span asp-validation-for="myClass.FieldB" class="text-danger"></span>
            </div>
            <div class="form-group">
                <button type="submit" value="Add" class="btn btn-success">Add Record)</button>
                <button type="submit" value="Copy" class="btn btn-warning">Edit Record</button>
            </div>          
        </form>
    </div>
</div>

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

в конце моей страницы .cs html , но он запускается всегда, когда вызывается onPost.

Мне нужно запустить проверку «в группах»: для одного набора кнопок из одних полей и игнорировать другие, для другого - другой набор и т. д., как написано выше

Есть ли способ добиться этого без написания пользовательских javascript или сделать это на стороне сервера? ..

ДРУГОЕ РЕДАКТИРОВАНИЕ

Ответ был предоставлен для случая, когда у нас есть четкое разделение полей ввода / кнопок. Но как мы можем справиться с этим, если у нас есть два поля ввода и одна кнопка. Валидация НЕ должна запускаться, если один из них заполнен, и должна срабатывать, если оба значения равны нулю Я понимаю, это звучит немного странно, но в моем примере у меня есть одно поле ввода и один выпадающий список. Таким образом, либо поле должно быть заполнено, либо элемент должен быть выбран из списка, но для простоты кода давайте оставим два поля ввода (поле A и поле B, одно из которых должно быть заполнено) и одну кнопку:

@page "{id:int}/{modeR:int}"
@model MyProject.Pages.MyProjectDB.AddRecordModel
@{
ViewData["Title"] = "Add Record";
}

<div class="row">
    <div class="col-md-7">
        <form method="post" enctype="multipart/form-data">
            <div class="form-group">
                <label asp-for="myClass.FieldA" class="control-label"></label>
                <input asp-for="myClass.FieldA" class="form-control" />
                <span asp-validation-for="myClass.FieldA" class="text-danger"></span>
            </div>  
            <div class="form-group">
                <label asp-for="myClass.FieldB" class="control-label"></label>
                <input asp-for="myClass.FieldB" class="form-control" />
                <span asp-validation-for="myClass.FieldB" class="text-danger"></span>
            </div>
            <div class="form-group">
                <button type="submit" value="Add" class="btn btn-success">Add Record)</button>
            </div>          
        </form>
    </div>
</div>

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

Заранее спасибо!

1 Ответ

1 голос
/ 01 мая 2020

При нажатии одной кнопки (Добавить) первое поле A должно быть проверено, при нажатии второго (копия) - еще одно (поле B) должно быть проверено

Вы можете попробовать поместить их в отдельный <form> и указать метод-обработчик с помощью атрибута asp-page-handler, как показано ниже.

<h1>Go Add Handler</h1>
<form method="post">
    <div class="form-group">
        <label asp-for="myClass.FieldA" class="control-label"></label>
        <input asp-for="myClass.FieldA" class="form-control" />
        <span asp-validation-for="myClass.FieldA" class="text-danger"></span>
    </div>
    <div>
        <button type="submit" value="Add" class="btn btn-success" asp-page-handler="Add">Add Record</button>
    </div>
</form>
<hr />
<h1>Go Copy Handler</h1>
<form id="myform" method="post">
    <div class="form-group">
        <label asp-for="myClass.FieldB" class="control-label"></label>
        <input asp-for="myClass.FieldB" class="form-control" />
        <span asp-validation-for="myClass.FieldB" class="text-danger"></span>
    </div>
    <div>
        <button type="submit" value="Copy" class="btn btn-warning" asp-page-handler="Copy">Edit Record</button>
    </div>
</form>
@section scripts{
    @await Html.PartialAsync("_ValidationScriptsPartial")
}

Результат теста

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...