8

当我们单击表单的提交按钮时,将调用具有 HTTPPost 属性的控制器的操作,但是如果我想在单击普通 HTML 按钮时调用或执行操作怎么办 虽然以下文章

http://www.codeproject.com/Tips/198477/Calling-a-MVC-Controller-and-Action-Method-using-H

调用 MVC 控制器和操作方法的 HTML 按钮

告诉方法,但是这两个都在视图中使用控制器名称,因此视图必须了解控制器,我正在寻找视图不必了解控制器的答案。因为视图必须独立于控制器,视图不应该知道控制器所以,如果你知道答案,请回复

4

3 回答 3

16

将您的用户定向到由创建的 url 的任何形式

<a href='@Url.Action("{action}", "{controller}")'> click me </a> 

或者

@using(BeginForm("{action}", "{controller}")

会做你想做的。

这可以与

  • 形式
  • 按钮链接

重要的是目的地。视图对动作或控制器一无所知。帮手可以。

于 2013-03-01T13:54:27.973 回答
0

要从客户端(即从视图)执行 MVC 操作,您需要点击一个 URL(使用任何动词:get、post、put 等)。因此,要从视图执行操作,您需要知道该操作的 URL,默认情况下,该 URL 直接映射到该操作,controllername/actionname但如果您想在视图和控制器之间创建更多抽象,您可以重新定义它。

鉴于此,您的按钮只需要链接到 URL 或链接到 js 即可执行 Ajax http 请求。

希望有帮助。

于 2013-03-01T13:55:21.047 回答
0

您不能在同一个控制器上具有相同名称和相同 HTTP 动词的 2 个操作。所以你问的没有意义。您可以调用与呈现视图的控制器操作相同的控制器操作,而无需指定操作和控制器名称。Html.BeginForm()无需指定操作和控制器名称即可工作的原因是表单正在向服务器发送 POST 请求,您可以区分这 2 个操作。

于 2013-03-01T13:59:05.243 回答