У меня есть две кнопки в моей форме MVC:
<input name="submit" type="submit" id="submit" value="Save" />
<input name="process" type="submit" id="process" value="Process" />
Как я узнаю из действия моего контроллера, какой из них был нажат?
c#
asp.net
asp.net-mvc
razor
Coppermill
источник
источник
<input name="submit" type="submit" id="submit" value="Save" onclick="saveMethod" />
?Ответы:
Назовите обе кнопки отправки одинаково
Затем в вашем контроллере получите значение submit. Только нажатая кнопка передаст свое значение.
Конечно, вы можете оценить это значение для выполнения различных операций с блоком переключения.
источник
<button type="submit" name="action" value="draft"> Internationalized Save Text </button>
для целей i18n, чтобы строка, обращенная к пользователю, была настраиваемой, а имена элементов формы никогда неИ в действии вашего контроллера:
источник
это лучший ответ, поэтому у нас может быть как текст, так и значение для кнопки:
http://weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form.aspx
и контроллер:
Короче говоря, это кнопка SUBMIT, но вы выбираете имя с помощью атрибута name, он даже более мощный, потому что вы не обязаны указывать имя или кнопку в параметрах метода контроллера, вы можете называть его как хотите ...
источник
вы можете идентифицировать свою кнопку с помощью тега имени, как показано ниже, вам нужно проверить это в своем контроллере
источник
Вот действительно хороший и простой способ сделать это с очень легкими для выполнения инструкциями с использованием настраиваемого атрибута MultiButtonAttribute:
http://blog.maartenballiauw.be/post/2009/11/26/Supporting-multiple-submit-buttons-on-an-ASPNET-MVC-view.aspx
Подводя итог, сделайте ваши кнопки отправки такими:
Ваши действия такие:
И создайте этот класс:
источник
MultiButtonAttribute
настраиваемого атрибута, позволяющего различать кнопки отправки. На самом деле неплохая идея.Arnis L.
бы последовали тому же совету, вы могли бы заметить, что он предоставил ту же самую ссылку 4 года назад:>источник
Чтобы упростить задачу, я скажу, что вы можете изменить свои кнопки на следующие:
Ваш контроллер:
источник
Этот пост не будет отвечать Coppermill, потому что ему давным-давно ответили. Мой пост будет полезен тем, кто будет искать подобное решение. Прежде всего, я должен сказать: «Решение WDuffy полностью правильное», и оно работает нормально, но мое решение (на самом деле не мое) будет использоваться в других элементах, и это сделает уровень представления более независимым от контроллера (поскольку ваш контроллер зависит от «значение», которое используется для отображения метки кнопки, эта функция важна для других языков.).
Вот мое решение, дайте им разные имена:
И вы должны указать имена кнопок в качестве аргументов в действии, как показано ниже:
когда пользователь отправляет страницу с помощью одной из кнопок, только один из аргументов будет иметь значение. Думаю, это будет полезно для других.
Обновить
Это довольно старый ответ, и я пересматриваю свое мнение. возможно, приведенное выше решение подходит для ситуации, когда параметр передается в свойства модели. не беспокойтесь и выберите лучшее решение для вашего проекта.
источник
input[type=submit]
значение, которое было инициировано, поэтому все они могут привязать модель к свойству с одним и тем жеname
(напримерaction
), а затем вы можете различать кнопки на основеvalue
этой строки без необходимости вводить столько переменных в свою подпись , Пожалуйста, также подумайте о форматировании / отступах перед публикацией.Не можете узнать с помощью Request.Form Collection? Если щелкнуть процесс, request.form ["процесс"] не будет пустым.
источник
Дайте имя обеим кнопкам и проверьте значение из формы.
На стороне контроллера:
источник
На страницах Core 2.2 Razor работает такой синтаксис:
источник
string submit
записиstring submit = Request.Form["Submit"];
. Одним из самых больших преимуществ Razor Pages и / или MVC является удобочитаемость методов, иначе это мог бы быть PHP.