以正确的方式从视图中调用控制器方法

Posted

技术标签:

【中文标题】以正确的方式从视图中调用控制器方法【英文标题】:Call a controller method from a View in a proper way 【发布时间】:2013-07-26 00:24:59 【问题描述】:

正如标题中提到的那样。我从视图中调用控制器方法的最佳方法是什么。 ViewBag、htmlHelper ...?

【问题讨论】:

【参考方案1】:

当用户请求一个页面时,网页首先使用路由找到合适的控制器。然后它完成所有服务器端 C# 代码。然后它填充 html 模板并将 html 发送给用户。您不能从服务器上的视图中调用控制器。但是当视图页面在客户端浏览器上运行时,您可以对服务器进行 ajax 调用,然后将数据发送回控制器

这里是例子

http://www.codeproject.com/Articles/41828/JQuery-AJAX-with-ASP-NET-MVC

让我缩小浏览器采取的步骤。

    用户请求页面

    /首页/索引

    ASP MVC 服务器将请求发送到路由。默认路由在 global.aspx 文件中。 路由调用适当的控制器/动作。 Action 运行服务器代码并可选择将数据发送到视图。 视图模板被填写,HTML/css/javascript被发送到客户端。 在浏览器上加载页面或用户点击后,您可以将 ajax 请求发送回服务器

【讨论】:

【参考方案2】:

您只需将其设为 ActionResult。此外,如果您使用的是 Ajax POST,则需要使用 HttpPost 属性标记该操作。试试这个:

[HttpPost]
public ActionResult test()

    return Content("It works");

你在view.cshtml中添加javascript标签。

// Sample Ajax Request.   
$.ajax(
           url: '@Url.Action("test", "Home")',
          data: dealerID: dealerID,
          type: 'POST',
          success: function(data) 
            alert(data);
         

);

注意:

Url.Action 具有控制器/动作参数。应该首先是“ActionName”,然后是“ControllerName”。 对于 Url.Action,如果控制器类是“HomeController”,那么您只需要“Home” 请求成功时显示警报的 JQuery 选项。 -- 应该成功:function(data) 。

【讨论】:

【参考方案3】:
@Html.ActionLink("LinkText", "ActionName", "ControllerName")

【讨论】:

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

从委托类调用视图控制器方法,有问题

以编程方式设置为根视图控制器时,视图控制器无法正确显示子视图

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

使用 Storyboard id iOS 以编程方式调用视图控制器

如何以编程方式调用View Controller?

从 UIView 以编程方式加载视图控制器