【问题标题】:MVC: View to Model interaction exampleMVC:视图到模型交互示例
【发布时间】:2025-12-15 22:25:01
【问题描述】:

有大量的articles 指出,在 MVC 架构中,View 可以直接与 Model 交互,即请求数据。

视图到模型交互的真实示例会是什么样子?程序员什么时候会通过 Controller 传递数据,什么时候允许 View 直接从 Model 中获取数据?

附: MVC 在 Web 开发中被大量使用,但就我而言,View 总是通过 Controller 与 Model 交互。

【问题讨论】:

  • 你会把什么归类为现实世界的例子?
  • @wero, 任何指向以任何语言编写的示例的链接,或者只是 View 与 Model 交互时情况的常见描述

标签: model-view-controller


【解决方案1】:

在此示例中,视图使用 Razor 进行渲染。这演示了在将 ActionResult 服务回客户端后使用 jQuery.Get() 实例化数据请求的视图

这是控制器

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpGet]
    public JsonResult GetSomeData()
    {
        return Json(new GetSomeDataModel{
            StringBar = "This is StringBar. And BoolBar: ";
            BoolBar = false;
        });
    }
}

这是数据的模型,而不是视图。

public class GetSomeDataModel
{
    public bool BoolBar {get;set;}
    public string StringBar {get;set;}
}

这是视图:

@{
    ViewBag.Title = "Home Index Page";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@section Scripts
{
    //And now we make a second request to the controller for the data...
    $.get( "@Url.Action("GetSomeData", "Home")", function( data ) {
        alert( "Load was performed." ); 
        console.log(data);
    }
}

【讨论】:

  • 谢谢。您能否详细说明通过控制器传递数据优于直接视图模型请求的情况?只是基于请求的复杂性吗?
  • 您选择加载数据的原因是分片,因为它并不是完成响应所必需的。查看延迟加载和急切加载。