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它的地方,我的頁面鏈接變成空白。我應該通過什麼方式讓我的頁面保持原樣,並且不會出現新的空白窗口。

+0

的問題是在你的控制器的方法,而不是在這個網站助手調用。看來你的方法正在返回一個空的結果。您應該向我們顯示缺少的代碼。順便說一下,您的方法應該在'InvoiceController'類中被稱爲'SendPdfStatement'。你確定你在檢查正確的嗎? –

+0

該方法僅在InvoiceController中被稱爲SendPdfStatement。已經把方法 – 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(); 
    } 

編輯: 或者你應該使用AJAX讓你的網頁沒有重新加載,你不必從你的方法返回任何東西。在這裏閱讀http://www.asp.net/mvc/overview/older-versions-1/contact-manager/iteration-7-add-ajax-functionality-cs

+0

但我沒有任何東西回到這裏 – 14578446

+0

你這樣做。您正在返回視圖,以便可以在頁面上顯示某些內容。你可以做'返回視圖('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使原始窗口變爲空白。由於將{item.InvoiceNumber}作爲html參數,所以留下{target =「_blank」}引發異常。 – 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

我假設你擊中了錯誤的方法過載如果你得到錯誤。如果你用null替換htmlArguments,你應該很好去,但是當你的方法返回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

嘗試這個

<%=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以及