MVC - 从视图调用控制器

8

我是MVC的新手

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

因此,在该视图中,我需要填充多个数据。比如说,如果这个应用程序是一个“新闻动态”应用程序,我需要填充最近的新闻、你喜欢的新闻、你的朋友推荐的新闻等。所以,我应该从视图中向所有需要的控制器发出ajax调用来获取这些数据并将它们附加在视图中吗?

目前,我能够通过从控制器发出ajax调用并获取数据来获得数据,但据我的理解,在MVC中首先调用控制器并呈现视图,在我目前使用的方式中,我正在从视图中再次调用控制器。

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

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


你可以在 Razor 中使用 @Html.Action("ActionName", "ControllerName") 调用每个视图,也可以在 ActionMethod 中使用 ViewBag.PropertyName 来从不同的数据源中填充所有数据,例如:ViewBag.Property1、ViewBag.Property2 等等。在视图中,你可以枚举或获取来自 ViewBag 的结果集。 - Idrees Khan
2个回答

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();
        }

那么MVC会有什么不同呢? 在三层应用中,我将调用一些Web方法的Ajax调用。 这里我正在调用一个ActionResult函数。 - Vignesh Subramanian

3
您可以使用 ChildActionOnly
[ChildActionOnly]
public ActionResult GetLatestNews()
{
  //...
  return PartialView("yourView",yourquery);
}

并在您的视图中这样调用:

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

但是@Html.Action不是ajax调用。Action GetLastestNews必须由jquery调用,并且结果(来自partial的HTML代码)必须插入到DOM中。或者我错过了什么? - Krahu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接