MVC - 需要从视图调用控制器中的方法

Posted

技术标签:

【中文标题】MVC - 需要从视图调用控制器中的方法【英文标题】:MVC - Need to call a method in Controller from View 【发布时间】:2011-11-02 21:26:28 【问题描述】:

在视图上提交页面时,我需要调用控制器中的方法。 我不知道该怎么做。如果您能提供一个关于如何调用控制器的小示例,将不胜感激。

【问题讨论】:

这不会破坏MVC 最重要的方面,即职责分离吗?视图不一定知道调用的是哪个控制器,它只是传递了一个模型来渲染。最好解释一下最终目标是什么。听起来像是 XY 情况meta.stackexchange.com/questions/66377/what-is-the-xy-problem/…。 【参考方案1】:

编辑:不确定您使用什么框架来开发您的应用程序,但这里有一个使用 ASP.NET MVC 的示例。

听起来您想知道如何使用控制器中定义的 Action 方法来处理从 View 提交的表单的处理。此示例使用 Razor 视图引擎。在您看来,您可以使用 BeginForm 辅助方法创建表单,如下所示:

@using (html.BeginForm("Action", "Controller", FormMethod.Post)) 
   @* form elements go here *@

其中字符串 "Action""Controller" 分别是您的操作方法和控制器的名称。

请注意,呈现的 HTML 在表单标签的 action 属性中包含 /controller/action 路由:

<form action="/Controller/Action" method="post">
</form>

另外请注意,您不必使用辅助方法,您可以使用上面的 HTML 创建自己的表单。

【讨论】:

【参考方案2】:

例如 - Ruby on Rails:

假设您有一个表格/模型“建筑物”

您将拥有一个 Building 模型(注意 - 单数)。

您将拥有一个 BuildingsController 类(在定义该控制器的文件中)。

此控制器将具有多种方法(在许多其他用途中)可以作为表单中的操作调用,即作为您的建筑视图的视图。

rails 中的表单代码是form_for :building,它构建了适当的 html 表单标签,其动作将指向控制器方法,该控制器方法也使用来自模型的信息。

当表单被提交时,它会根据操作知道要转到哪个控制器方法,并且。处理后,例如保存到数据库后,控制器还将负责确定显示哪个视图(例如错误页面、建筑物列表页面等)

正如您在 Rails 中看到的建筑的标准用法,一旦您了解了惯例,建筑和建筑就非常方便。

【讨论】:

以上是关于MVC - 需要从视图调用控制器中的方法的主要内容,如果未能解决你的问题,请参考以下文章

从 MVC 中控制器中的不同方法向视图发送消息

需要从 MVC 5 中的控制器操作关闭 Jquery UI 对话框

使用 mvc 视图中的参数从 jquery 调用 web api

从控制器动态渲染动作 - MVC

在 ASP.NET MVC 中:从 Razor 视图调用控制器操作方法的所有可能方式

确保控制器方法实际上是由 ajax 或 mvc 中的 POST 请求调用的