Передайте аргументы методу контроллера C #, используя <button>и jquery - PullRequest
0 голосов
/ 09 октября 2018

У меня есть модальный загрузчик, который имеет много кнопок, которые помогают загружать файлы разных форматов.Я могу ввести метод контроллера, когда использую функцию onclick, как указано ниже:

onclick="location.href='@Url.Action("DownloadAsJPG", "Home")'"

Я хотел бы выполнить загрузку файлов на основе условий, основываясь на нажатой кнопке, и поэтому я былдумая о передаче параметра как сделано здесь и здесь путем установки атрибута значения кнопок

HTML:

<button type="button" id="tojpg" class="btn btn-outline-primary" value="jpg">JPG</button>
<button type="button" class="btn btn-outline-primary" value="jpgcmyk">JPG-CMYK</button>
<button type="button" class="btn btn-outline-primary" value="jpgrgb">JPG-RGB</button>

Аргумент в методе контроллера всегда остается нулевым.Я не уверен, что я пропустил.

Метод контроллера:

public FileResult DownloadAsJpg(string argument)
{ Some action }

Я попытался поиграть с jquery, который я нашел в вопросе stackoverflow, который неМне тоже не помогло, я не смог связаться с контроллером с помощью этого jquery.

Jquery

$('#tojpg').click(function (e) {
        e.preventDefault();
        window.location = '/Home/DownloadAsJpg?argument=' + $('#tojpg').val();
    });

Любые советы будут с благодарностью.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Это можно решить двумя способами:

Опция 1

A <button /> не является частью данных, публикуемых в форме.Вот почему он не появляется на стороне сервера.Вы должны изменить это на вход, например так:

<input type="submit" name="argument" value="jpg" />

Имя этого поля должно совпадать с именем параметра в вашем действии.Поскольку это поле input, браузер отправит его вместе со всем сообщением.Это то, что делается в сообщениях, на которые вы ссылались.

Вариант 2

Если вы хотите использовать window.location вместо этого, то вам необходимо убедиться, чтодействие допускает GET-запрос и вы передаете argument в качестве строки запроса:

onclick="location.href='@Url.Action("DownloadAsJPG", "Home", new { argument = "jpg" })'"

0 голосов
/ 09 октября 2018

Если вы можете связаться с вашим контроллером с помощью

onclick="location.href='@Url.Action("DownloadAsJPG", "Home")'"

и просто хотите передать некоторые параметры.Вы можете сделать то же самое, что и

onclick="location.href='@Url.Action("DownloadAsJPG", "Home", new { argument = "tojpg" })'"

или с помощью события Jquery

Редактировать

Попробуйте заключить ваше событие в $(document).ready(),По моему опыту, в большинстве случаев причина неработающих событий заключается в том, что ваши кнопки еще не созданы, когда происходит привязка событий.

$(document).ready(function() {
    $('#tojpg').click(function (e) {
        e.preventDefault();
        location.href = '@Url.Action("DownloadAsJPG", "Home", new { argument = "tojpg" })';
    });
}

И если вы не хотите писать отдельное событие для каждой кнопкивариант, вы можете создать что-то вроде этого.

<button type="button" class="btn btn-outline-primary" value="jpg">JPG</button>
<button type="button" class="btn btn-outline-primary" value="jpgcmyk">JPG-CMYK</button>
<button type="button" class="btn btn-outline-primary" value="jpgrgb">JPG-RGB</button>

и событие Jquery, как это

$(document).ready(function() {
    $('.btn').click(function () {
        location.href = '@Url.Action("DownloadAsJPG", "Home", new { argument = "'+ $(this).attr("value") +'" })';
    });
}

Это должно работать.

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