为什么我需要将模型传递给视图
本文关键字:视图 模型 为什么 | 更新日期: 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
。您仍然可以传递ViewBag
或ViewData
来向视图发送一些动态数据。
是否可以在没有模型的情况下创建视图
是
某些情况:
半静态页面:您不需要模型,因为页面中显示的几乎所有内容都是静态的。
容器页面:它可以包含许多局部视图、javascript调用或任何您可以想象的日常检索数据的内容。
在许多其他情况下,模型的存在与业务逻辑(或良好实践逻辑)不对应
请记住,赞助人是来引导我们的,而不是强迫我们只做一种方式。检查什么最适合你的应用程序,更改你不喜欢的部分。尽量利用这个框架中最好的部分,但要记住它是可以帮助你的。