我正在尝试在html中创建一个按钮,当它被单击时,它会调用我的控制器中的一个方法来创建一个pdf。
我的控制器是DashboardController,我的方法叫做PrintConfirm()
这是我的HTML:
<a onclick="<%:Url.Action("PrintConfirm")/%>fileName" rel="external" target="_blank">
<button class="ui-icon ui-icon-print" data-role ="button">Print Confirmation</button>
</a>
当我运行它时,我得到的只是一个打印机图标,当我点击它时没有任何反应
答案 0 :(得分:2)
您的鳄鱼标记不正确,onclick
应为href
。试试这个:
<a href='<%=Url.Action("PrintConfirm")%>/filename' rel="external" target="_blank">
<button class="ui-icon ui-icon-print" data-role ="button">Print Confirmation</button
</a>
此外,无法从视图中调用void方法。只能调用操作,操作的返回类型必须为ActionResult
。
此外,如果您的PrintConfirm
操作位于与返回当前视图的控制器不同的控制器上,则您还需要指定该控制器的名称。
<%=Url.Action("PrintConfirm", "PdfPrinter") /* where the controller is PdfPrinterController */%>
修改的
如果您只是尝试异步调用操作,则可能需要使用jQuery和AJAX。如果你想要一个例子,请告诉我。
答案 1 :(得分:0)
首先应将onclick替换为href
Onclick是一个可以由JavaScript代码处理的事件,所以在你的情况下它只会做什么,因为Onclick将包含动作的相对URL而不是js代码。但你也不必使用它,只需要常规的href属性。
答案 2 :(得分:0)
查看生成的代码。你会看到像
这样的东西<a onclick="/Dashboard/PrintConfirmfilename" rel="external" target="_blank">
我是对的吗? onclick期待javascript。
答案 3 :(得分:0)
让我们一起解决这个问题......
Url.Action()返回什么?一个网址。
<a>
标签可用于1)将用户导航到URL(在这种情况下,您使用hre =属性)和/或2)运行一些javascript(在这种情况下,您将名称onclick属性中的javascript函数)。
你在这里所做的是在onclick中放入一个无效的网址。
答案 4 :(得分:0)
我知道这样做的唯一方法是使用AJAX
$.ajax({ type: "GET",
url: "./PrintConfirm",
success: function (data) {
//Load your PDF in the appropriate div? here
}
});
否则,您必须调用控制器并适当地重新加载屏幕。
答案 5 :(得分:0)
Url.Action将返回指向控制器中的操作的URL。因此,你最终会得到这样的东西:
<a onclick="/myController/PrintConfirmfilename" rel="external" target="_blank">...
这里有几个问题:
该操作的正确URL可能是/ myController / PrintConfirm,而不是/ myController / PrintConfirmfilename。额外的“文件名”似乎很奇怪。
在标签内部添加HTML按钮标签似乎很奇怪。我建议选择其中一个。
假设/ myController / PrintConfirm实际指向生成所需PDF的操作,以下是一些选项:
<a href=<%:Url.Action("PrintConfirm")>>
Print Confirmation
</a>
或
<button onclick=window.location=<%:Url.Action("PrintConfirm")>
Print Confirmation
</button>