5

У меня есть требование вызвать метод контроллера со страницы просмотра. При щелчке ссылки ниже метод должен быть вызван.Новое окно открывается по щелчку actionLink

@Html.ActionLink(item.InvoiceNumber, "SendPdfStatement", "Invoice", 
       new { item.InvoiceNumber }, new { target = "_blank" }) 

метод подписи, как:

public void SendPdfStatement(string InvoiceNumber) 
    { 

     InvoiceNumber = InvoiceNumber.Trim(); 

     ObjectParameter[] parameters = new ObjectParameter[1]; 
     parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber); 

     List<Models.Statement> list = new List<Models.Statement>(); 
     list = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters).ToList<Models.Statement>(); 

     var statementResult = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters); 
     Models.Statement statement = statementResult.SingleOrDefault(); 

     pdfStatementController.WriteInTemplate(statement);         

    } 

теперь проблема, когда я нажимаю на ссылку, откроется пустое окно. Я знаю, что это что-то с new { target = "_blank" }. Если я пройду null, то на моей странице моя страница со ссылкой станет пустой. Что мне передать, чтобы моя страница осталась такой, какая есть, и не появляется новое пустое окно.

+0

Проблема заключается в методе контроллера, а не в этом HTML-помощника вызова.Похоже, что ваш метод возвращает пустой результат. Вы должны показать нам недостающий код. Кстати, ваш метод следует называть 'SendPdfStatement', в классе' InvoiceController'. Вы уверены, что проверяете правильную? –

+0

метод называется SendPdfStatement только в InvoiceController. Положите код детали для метода – 14578446

ответ

2

Изменение контроллера действий. Страница, которую вы получаете, пуста, потому что вы ничего не возвращаете. У

public ActionResult SendPdfStatement(string InvoiceNumber) 

    { 
    InvoiceNumber = InvoiceNumber.Trim(); 

     ObjectParameter[] parameters = new ObjectParameter[1]; 
     parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber); 

     List<Models.Statement> list = new List<Models.Statement>(); 
     list = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters).ToList<Models.Statement>(); 

     var statementResult = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters); 
     Models.Statement statement = statementResult.SingleOrDefault(); 

     pdfStatementController.WriteInTemplate(statement); 

    return View(); 
    } 

EDIT: Или вы должны использовать AJAX, так что ваша страница не перезагружается, и вы не должны ничего возвращать из метода. Читайте здесь http://www.asp.net/mvc/overview/older-versions-1/contact-manager/iteration-7-add-ajax-functionality-cs.

+0

но я не хочу возвращаться сюда – 14578446

+0

Вы делаете. Вы возвращаете представление, чтобы что-то отображалось на странице. Вы можете сделать 'return View ('pathhere');' –

+0

Для моего первоначального просмотра требует наличия модели в качестве входных данных, которая будет недоступна здесь внутри "SendPdfStatement" – 14578446

0

попробуйте передать _self вместо _blank или же проходя null вместо, new { target = "_blank" }

т.е.@Html.ActionLink(item.InvoiceNumber, "SendPdfStatement", "Invoice", new { item.InvoiceNumber }, null)

или оставь в new { target = "_blank" } все вместе

+0

, пропуская _self или null, делает исходное окно незаполненным. Остаток {target = "_blank"} вызывает исключение, поскольку новый элемент {item.InvoiceNumber} принимается как параметр html. – 14578446

0

Прежде всего

TARGET = "_blank" 

Используется для открытия hyperreferenced ресурса в новом окне браузера, так что если вы не хотите, чтобы новое окно - почему бы вы положить, что на месте? :-)

Во-вторых, обратите внимание на метод ActionLink хелперов (описание я взял от вопроса ссылка ниже):

  Html.ActionLink(article.Title, 
      "Item", // <-- ActionMethod 
      "Login", // <-- Controller Name. 
      new { article.ArticleID }, // <-- Route arguments. 
      null // <-- htmlArguments .. which are none. You need this value 
        //  otherwise you call the WRONG method ... 
        //  (refer to comments, below). 
      ) 

взгляните на HTML.ActionLink method

Я предполагаю, что вы попав неправильный метод если вы получаете ошибки. Если вы замените htmlArguments на null, вам должно быть хорошо идти, но по мере того, как ваш метод возвращает VOID (ничего), вы получите пустую страницу (что еще вы ожидаете :)?)

Для отмены навигации по умолчанию механизм в можно реализовать простое правило Jquery:

$('a.invoicelinkclass').click(function(e){ 
    e.preventDefault(); 
    $.get($(this).attr('href'),function(){ 
     // maybe an alert() or jquery ui .dialog() to let user know that something happened ? 
    }); 
}); 
+0

просто хочет избавиться от пустой пустой страницы – 14578446

+0

вы можете использовать javascript (я обновил мой ответ), но было бы хорошо сообщить пользователю, будет ли его действие успешным или нет – torm

6

Try This

<%=Html.ActionLink(a.Title, "View", "Report", new { Id = a.id.ToString() }, new { target="_blank" })%> 
0
@Html.ActionLink(item.InvoiceNumber, "SendPdfStatement", "Invoice", 
       new { item.InvoiceNumber }, null); 

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

1
<input type="button" class="btn btn-primary" value="Text" onclick="window.open('@Url.Action("Action", "Controller")',target='_blank');return false;"/>   

<button type="button" class="goBtn btn btn-primary btn-mid" onclick="window.open('@Url.Action("CheckInReport", "Staff")', target='_blank')" id="CheckIn">Check In</button> 

Это работает для MVC5 а