Новое окно открывается по клику actionLink - PullRequest
5 голосов
/ 14 декабря 2011

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

@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, то моя страница со ссылкой станет пустой. Что я должен передать здесь, чтобы моя страница осталась такой, как есть, и новое пустое окно также не появляется.

Ответы [ 6 ]

6 голосов
/ 04 августа 2013

Попробуйте

<%=Html.ActionLink(a.Title, "View", "Report", new { Id = a.id.ToString() }, new { target="_blank" })%> 
2 голосов
/ 14 декабря 2011

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

 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.

1 голос
/ 27 сентября 2013
<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

0 голосов
/ 04 августа 2013
@Html.ActionLink(item.InvoiceNumber, "SendPdfStatement", "Invoice", 
                 new { item.InvoiceNumber }, null);

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

0 голосов
/ 14 декабря 2011

Прежде всего

TARGET = "_blank"

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

Во-вторых, посмотрите на вспомогательный метод 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 метод

Я предполагаю, что вы попали в неправильную перегрузку метода, если вы получаете ошибки.Если вы замените 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 голосов
/ 14 декабря 2011

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

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

или пропуститеnew { target = "_blank" } все вместе

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