New window opens on click of actionLink

后端 未结 6 1332
时光说笑
时光说笑 2021-01-05 20:18

I have a requirment to invoke a controller method from the view page. On click of the link below the method should be invoked.

@Html.ActionLink(item.InvoiceN         


        
相关标签:
6条回答
  • 2021-01-05 21:02

    try passing _self instead of _blank or alternatively passing null instead of , new { target = "_blank" }

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

    or leave off the new { target = "_blank" } all together

    0 讨论(0)
  • 2021-01-05 21:08

    First of all

    TARGET = "_blank"
    

    Is used to open hyperreferenced resource in a new browser window, so if you don't want the new window - why would you put that in place ? :-)

    Second, look at the ActionLink helper method (description I took from question referenced bellow):

             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).
                )
    

    take a look at HTML.ActionLink method

    I assume you're hitting the wrong method overload if you get errors. If you replace htmlArguments with null, you should be good to go, but as your method returns VOID (nothing) you will get an empty page (what else would you expect :) ? )

    To cancel the default navigation mechanism you can implement simple jquery rule :

    $('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 讨论(0)
  • 2021-01-05 21:11

    Change your controller Action. The page that you get is blank because you are not returning anything. Do

     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: Or you should use AJAX so that your page is not reloaded and you don't have to return anything from your method. Read here http://www.asp.net/mvc/overview/older-versions-1/contact-manager/iteration-7-add-ajax-functionality-cs.

    0 讨论(0)
  • 2021-01-05 21:11

    Try This

    <%=Html.ActionLink(a.Title, "View", "Report", new { Id = a.id.ToString() }, new { target="_blank" })%> 
    
    0 讨论(0)
  • 2021-01-05 21:14
    <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>
    

    This works for MVC5 as well

    0 讨论(0)
  • 2021-01-05 21:18
    @Html.ActionLink(item.InvoiceNumber, "SendPdfStatement", "Invoice", 
                     new { item.InvoiceNumber }, null);
    

    So basically that last parameter is your html attributes, if you don't need it to open in a new window...that's the only attribute in there so just pass null for the whole parameter.

    0 讨论(0)
提交回复
热议问题