我有一个要求从视图页面调用控制器方法的要求。点击下面的链接,应该调用该方法。
@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 :(得分:6)
试试这个
<%=Html.ActionLink(a.Title, "View", "Report", new { Id = a.id.ToString() }, new { target="_blank" })%>
答案 1 :(得分: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。
答案 2 :(得分: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
答案 3 :(得分:0)
尝试传递_self
代替_blank
或者传递null
代替new { target = "_blank" }
即 @Html.ActionLink(item.InvoiceNumber, "SendPdfStatement", "Invoice", new { item.InvoiceNumber }, null )
或完全放弃new { target = "_blank" }
答案 4 :(得分: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).
)
如果您遇到错误,我假设您遇到错误的方法重载。如果你用h替换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 ?
});
});
答案 5 :(得分:0)
@Html.ActionLink(item.InvoiceNumber, "SendPdfStatement", "Invoice",
new { item.InvoiceNumber }, null);
基本上,最后一个参数是你的html属性,如果你不需要它在新窗口中打开...那是唯一的属性,所以只需为整个参数传递null。