MVC - 从视图调用控制器

时间:2014-01-16 07:17:44

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我是MVC的新手

我正在使用MVC开发一个Web应用程序,该应用程序只包含一个页面。

所以在那个视图中我必须填充多个数据。假设应用程序是“新闻源”应用程序,我需要填充最近的新闻,您喜欢的新闻,朋友推荐的新闻等。所以我应该从视图到所有必需的控制器进行ajax调用以获取这些数据并追加在视图??

目前我可以通过对控制器进行ajax调用并获取数据来获取数据,但根据我的理解,控制器首先在MVC中调用,然后呈现视图和我当前使用的方式我从视图中调用控制器。

这种方法是否正确?在MVC中实现这一结果的正确方法是什么?

如果我必须使用Ajax调用控制器并获取数据,那么MVC会有什么不同? 在3层应用程序中,我将对某些Web方法或处理程序进行ajax调用,这将返回一些数据 在这里我调用一个动作结果函数,它再次返回一些数据

2 个答案:

答案 0 :(得分:6)

是的,您可以像这样使用ajax调用

$(document).ready(function () {
            $('#CategoryId').change(function () {
                $.getJSON('/Publication/AjaxAction/' + this.value, {},
                  function (html) {
                      $("#partial").html(html);

                      alert("go");
                  });
            });
        });

然后从控制器加载局部视图。

public ActionResult AjaxAction(int Id)
        {
            if (Request.IsAjaxRequest())
            {
                if (Id== 1)
                {
                    ViewBag.SourceTypeId = new SelectList(db.SourceTypes, "Id", "Title");
                    ViewBag.CityId = new SelectList(db.Cities, "Id", "Title");
                    return PartialView("_CreateStatya");
                }
            }
            return PartialView();
        }

答案 1 :(得分:3)

您可以使用ChildActionOnly

[ChildActionOnly]
public ActionResult GetLatestNews()
{
  //...
  return PartialView("yourView",yourquery);
}

并以这种方式在您的视图中调用它:

 @Html.Action("GetLatestNews","Home")