以正确的方式从视图中调用控制器方法
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 视图调用控制器操作方法的所有可能方式