使用mvc2和c#,如何从视图中调用控制器中的void方法

时间:2012-02-23 20:40:03

标签: c# asp.net-mvc-2

我正在尝试在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>

当我运行它时,我得到的只是一个打印机图标,当我点击它时没有任何反应

6 个答案:

答案 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">...

这里有几个问题:

  1. 该操作的正确URL可能是/ myController / PrintConfirm,而不是/ myController / PrintConfirmfilename。额外的“文件名”似乎很奇怪。

  2. 在标签内部添加HTML按钮标签似乎很奇怪。我建议选择其中一个。

  3. 假设/ myController / PrintConfirm实际指向生成所需PDF的操作,以下是一些选项:

    <a href=<%:Url.Action("PrintConfirm")>>
       Print Confirmation
    </a>

    <button onclick=window.location=<%:Url.Action("PrintConfirm")>
       Print Confirmation
    </button>