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

时间:2015-12-15 06:05:01

标签: c# asp.net-mvc

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

return View(model);

为什么我们不能简单地返回视图? 为什么我们在行动结果return view()

中添加了模型参数

此外,任何人都可以举例说明我必须使用return view(model)

7 个答案:

答案 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的数据。您仍然可以通过ViewBagViewData向视图发送一些动态数据。

是否可以拥有不带模型的视图?

有些情况:

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

  • 容器页面:它可以包含很多局部视图,javascript调用或任何您可以想象的以动态方式检索数据。

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

请记住,顾客在那里指导我们,而不是强迫我们以一种方式做事。检查什么是最适合您的应用程序,更改您不喜欢的位。尝试充分利用框架,但请记住它可以帮助您。