Получить значение для нескольких кнопок с одной формой в одном методе

#c# #asp.net-core #razor #asp.net-core-razor-pages

#c# #asp.net-ядро #razor #asp.net-core-razor-pages

Вопрос:

Я использую новые страницы .NET Core Razor. Если у меня несколько кнопок, как мне получить значение каждой кнопки?

Пример на моих страницах razor у меня есть 2 кнопки:

     <form method="post">
            <button type="submit" value="2020" id="btn1">2020</button>
            <button type="submit" value="2019" id="btn2">2019</button>
    </form>
 

и в моем коде за:

     public void OnPost()
    {
     // How to get btn1 value (2020) and btn2 value (2019) here?
    }
 

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

1. Со стороны сервера вы можете получить только значение кнопки, которая использовалась для отправки формы. Если вам нужны другие передаваемые значения, я предлагаю поместить их в скрытые переменные в той же форме.

Ответ №1:

Как сказал Джон, вы можете получить только значение кнопки, которая использовалась для отправки формы. Если вы хотите опубликовать обе кнопки, поместите их в скрытые переменные — это хороший подход.

Примечания: asp.net система привязки базовой модели будет привязывать значение по имени в элементе html, а не по идентификатору.

Один из способов — вручную добавить эти входные данные:

 <form method="post">
    <input hidden  value="2020" name="btn1"/>
    <input hidden  value="2019" name="btn2"/>
    <button type="submit" value="2020" id="btn1">2020</button>
    <button type="submit" value="2019" id="btn2">2019</button>
</form>
 

Другой способ — использовать jquery для автоматического добавления входных данных:

 <form method="post">
    <button type="submit" value="2020" id="btn1">2020</button>
    <button type="submit" value="2019" id="btn2">2019</button>
</form>

@section Scripts
{
<script>
    $("form").submit(function () {
        $("button[type=submit]").each(function (i) {
            i  ;
            var value = $(this).val();
            var input = $("<input>")
                .attr("type", "hidden")
                .attr("name", "btn"   i).val(value);
            $('form').append(input);

        });
        
    });
</script>
}
 

Серверная часть:

 public void OnPost(int btn1,int btn2)
{
   //do your stuff...
}
 

Результат:
введите описание изображения здесь