Используя mvc2 и c #, как я могу вызвать метод void в моем контроллере из представления - PullRequest
0 голосов
/ 24 февраля 2012

Я пытаюсь сделать кнопку в html, чтобы при нажатии на нее вызывался метод, находящийся в моем контроллере, который создаст PDF.

мой контроллер - DashboardController, мой метод - PrintConfirm)

вот мой HTML:

<a onclick="<%:Url.Action("PrintConfirm")/%>fileName" rel="external" target="_blank">
    <button class="ui-icon ui-icon-print" data-role ="button">Print Confirmation</button>
</a>

Когда я запускаю его, все, что я получаю, это значок принтера, и ничего не происходит, когда я нажимаю на него

Ответы [ 6 ]

2 голосов
/ 24 февраля 2012

Ваш тег gator неверен, и ваш onclick должен быть href. Попробуйте это:

<a href='<%=Url.Action("PrintConfirm")%>/filename' rel="external" target="_blank">
    <button class="ui-icon ui-icon-print" data-role ="button">Print Confirmation</button
</a>

Кроме того, вы не можете вызвать метод void из представления. Только действия могут быть вызваны, и действия должны иметь тип возврата ActionResult.

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

<%=Url.Action("PrintConfirm", "PdfPrinter") /* where the controller is PdfPrinterController */%> 

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

Если вы просто пытались вызвать действие асинхронно, вы, вероятно, захотите использовать jQuery и AJAX. Дайте мне знать, если вы хотите пример.

0 голосов
/ 24 февраля 2012

Url.Action собирается вернуть URL, который указывает на действие в контроллере.Таким образом, вы получите что-то вроде этого:

<a onclick="/myController/PrintConfirmfilename" rel="external" target="_blank">...

Здесь есть несколько проблем:

  1. Вероятно, правильный URL-адрес действия/ myController / PrintConfirm, а не / myController / PrintConfirmfilename.Дополнительное имя файла кажется странным.

  2. Кажется странным иметь тег HTML-кнопки внутри тега.Я бы порекомендовал выбрать один или другой.

Предполагая, что / myController / PrintConfirm фактически указывает на действие, которое создает нужный PDF-файл, вот несколько параметров:

<a href=<%:Url.Action("PrintConfirm")>>
   Print Confirmation
</a>

или

<button onclick=window.location=<%:Url.Action("PrintConfirm")>
   Print Confirmation
</button>

0 голосов
/ 24 февраля 2012

Единственный способ, которым я знаю, это использовать AJAX

.
 $.ajax({ type: "GET",
        url: "./PrintConfirm",
        success: function (data) {
            //Load your PDF in the appropriate div? here
        }
    });

В противном случае вы должны позвонить в контроллер и перезагрузить экран соответствующим образом.

0 голосов
/ 24 февраля 2012

Давайте разберемся вместе ...

Что возвращает Url.Action ()?URL

<a> теги могут использоваться для 1) перехода пользователя к URL-адресу (в этом случае вы используете атрибут hre =) и / или 2) запуска некоторого JavaScript (в этом случае вы вводите имяфункции javascript в атрибуте onclick).

То, что вы здесь сделали, это вставили URL в клик, который просто не работает.

0 голосов
/ 24 февраля 2012

Посмотрите на сгенерированный код.Вы увидите что-то вроде

<a onclick="/Dashboard/PrintConfirmfilename" rel="external" target="_blank">

я прав?onclick ожидает JavaScript.

0 голосов
/ 24 февраля 2012

Onclick следует заменить на href в первую очередь

Onclick - это событие, которое может быть обработано кодом JavaScript, поэтому в вашем случае оно просто ничего не будет делать, поскольку Onclick будет содержать относительный URL-адрес действия вместо jsкод.Но вам также не нужно его использовать, просто обычный атрибут href.

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