我已经阅读了太多的教程,但没有一个解释这在行动结果中意味着什么
return View(model);
为什么我们不能简单地返回视图?
为什么我们在行动结果return view()
?
此外,任何人都可以举例说明我必须使用return view(model)
?
答案 0 :(得分:7)
因为您的视图使用模型来构建其内容。
如果您有这样的模型:
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背后的整个想法。视图只知道模型,以及如何显示模型 - 没有别的。
控制器知道要求数据的人,但不知道如何显示数据
答案 1 :(得分:4)
你不需要。
如果您要渲染的视图是静态的,控制器不需要任何信息,那么您只需使用return View();
public ActionResult SomeAction()
{
...
return View();
}
然后在您的.cshtml
文件中,不要声明任何@model
指令,它就可以了。
答案 2 :(得分:1)
您可以简单地返回视图,但是当您将模型传递到视图中时,您可以在viewbag中使用它,并通过该视图元素与模型数据绑定。
答案 3 :(得分:1)
您只需使用
即可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>
}
答案 4 :(得分:1)
您无需将对象传递给操作结果,但如果不这样做,则无法访问模型。
即。在静态页面上执行此操作是很常见的,例如关于屏幕:
public ActionResult About(){return View();}
此外,可以传递其他对象而不是完整模型。 见帖子:Must ASP.NET MVC Controller Methods Return ActionResult?
答案 5 :(得分:1)
在Asp.net MVC中,View(chtml)用于重新编辑UI; 如果您的视图是简单的或静态的,您可以在视图中构建您的html内容,而无需外部数据。
如果您需要数据(来自Db,Web服务等),您的View必须能够查询数据源。
有几种方法可以传递数据进行查看;通过View(Model)语句,通过viewbag等
我们也可以传递服务层对象,因此视图可以自己查询数据源。
为什么我们需要再次将Model传递给View?一旦进入View(cshtml),您将无法访问Controller - &gt;您可以准备好在模型中读取数据或服务层对象
答案 6 :(得分:1)
您只需返回一个视图:
View()
在该视图中,您将无法获取@model
的数据。您仍然可以通过ViewBag
或ViewData
向视图发送一些动态数据。
是否可以拥有不带模型的视图?
是强>
有些情况:
半静态页面:您不需要模型,因为几乎所有将在页面中显示的内容都是静态的。
容器页面:它可以包含很多局部视图,javascript调用或任何您可以想象的以动态方式检索数据。
许多其他情况,其中模型的存在与业务逻辑(或良好实践逻辑)不对应
请记住,顾客在那里指导我们,而不是强迫我们以一种方式做事。检查什么是最适合您的应用程序,更改您不喜欢的位。尝试充分利用框架,但请记住它可以帮助您。