为什么我需要将模型传递给视图

本文关键字:视图 模型 为什么 | 更新日期: 2023-09-27 18:26:52

我已经读了太多教程,但没有一本解释这在动作结果中意味着什么

return View(model);

为什么我们不能简单地返回视图?为什么我们要在行动结果的return view()中放入一个模型参数?

此外,任何人都可以举一个例子说明我必须使用return view(model)的情况?

为什么我需要将模型传递给视图

因为视图使用模型来构建其内容。

如果你有一个这样的模型:

public class Order
{
    public decimal Total { get; set; }
}

你的控制器:

public ActionResult GetOrderInformation(int orderID)
{
    var order = LoadOrder(orderID);
    return View(order);
}

有了这个观点:

@model Order
<html>
    <head> </head>
    <body>
        Your order costs @Model.Total
    </body>
</html>

您可以看到视图是如何完全独立于控制器的,或者信息是如何检索的——这就是MVC背后的全部思想。视图只知道模型以及如何显示模型,其他什么都不知道。

控制器知道向谁索取数据,但不知道如何显示

您不需要。

如果您正在渲染的视图是静态的,不需要来自控制器的信息,那么您可以使用return View(); 结束操作

public ActionResult SomeAction()
{
    ...
    return View();
}

然后在您的.cshtml文件中,不要声明任何@model指令,这样就可以了。

您可以简单地返回视图,但当您将模型传递到视图中时,您可以将其用作viewbag,并通过它将视图元素与模型数据绑定。

您可以简单地使用

return View();

但如果你需要绑定数据,那么你必须像一样通过

return View(model);

例如型号类别

public class BookViewModel
    {
        public Guid Id { get; set; }
        public string Name { get; set; }         
    }

控制器方法

public ActionResult Index()
{
    return View();
}
public ActionResult Create()
{
    return View(new BookViewModel());
}

查看

  @using (Html.BeginForm())
    {
        @Html.HiddenFor(m => m.Id)
        <div class="editor-label">
            @Html.LabelFor(m => m.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(m => m.Name)
            @Html.ValidationMessageFor(m => m.Name)
        </div>
    }

您不需要将对象传递给操作结果,但如果不这样做,则无法访问模型。

即在静态页面上这样做是很常见的,例如关于屏幕:

public ActionResult About(){return View();}

此外,也可以传递其他对象,而不是整个模型。请参阅文章:ASP.NET MVC控制器方法必须返回ActionResult吗?

在Asp.net MVC中,View(chtml)用于重新定义UI;如果视图是简单的或静态的,则可以在视图中构造html内容,而不需要外部数据。

如果您需要数据(来自Db、web服务等),您的View必须能够查询数据源。

有几种方法可以将数据传递给视图;通过View(Model)语句,通过viewbag等

我们还可以传递服务层对象,这样视图就可以自己查询数据源。

为什么我们需要再次将模型传递给视图?一旦进入View(cshtml),您就无法访问Controller->,您可以在Model 中传递准备读取的数据或服务层对象

您只需返回一个视图:

View()

在该视图中,您将没有可以获取数据的@model。您仍然可以传递ViewBagViewData来向视图发送一些动态数据。

是否可以在没有模型的情况下创建视图

某些情况:

  • 半静态页面:您不需要模型,因为页面中显示的几乎所有内容都是静态的。

  • 容器页面:它可以包含许多局部视图、javascript调用或任何您可以想象的日常检索数据的内容。

  • 在许多其他情况下,模型的存在与业务逻辑(或良好实践逻辑)不对应

请记住,赞助人是来引导我们的,而不是强迫我们只做一种方式。检查什么最适合你的应用程序,更改你不喜欢的部分。尽量利用这个框架中最好的部分,但要记住它是可以帮助你的。