5

我需要从视图页面调用控制器方法。单击下面的链接时,应调用该方法。

@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它的位置,我的链接页面将变为空白。我应该在这里传递什么,以便我的页面保持原样,并且不会出现新的空白窗口。

4

6 回答 6

6

试试这个

<%=Html.ActionLink(a.Title, "View", "Report", new { Id = a.id.ToString() }, new { target="_blank" })%> 
于 2013-08-04T05:47:23.217 回答
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();
    }

编辑:或者您应该使用 AJAX,这样您的页面就不会重新加载,并且您不必从您的方法中返回任何内容。在这里阅读http://www.asp.net/mvc/overview/older-versions-1/contact-manager/iteration-7-add-ajax-functionality-cs

于 2011-12-13T20:21:31.557 回答
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

于 2013-09-27T11:07:22.387 回答
0

尝试通过_self而不是_blank 或替代地通过null而不是,new { target = "_blank" }

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

new { target = "_blank" }或者一起离开

于 2011-12-13T20:07:02.517 回答
0

首先

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 ?
    });
 });
于 2011-12-13T20:25:38.180 回答
0
@Html.ActionLink(item.InvoiceNumber, "SendPdfStatement", "Invoice", 
                 new { item.InvoiceNumber }, null);

所以基本上最后一个参数是你的 html 属性,如果你不需要它在新窗口中打开......那是那里唯一的属性,所以只需为整个参数传递 null 。

于 2013-08-04T07:43:56.893 回答