@model关键字在asp.net中有什么作用?. NET MVC视图

本文关键字:作用 NET MVC 视图 什么 关键字 asp net @model | 更新日期: 2023-09-27 17:51:10

我对如何将@model语句转换为cshtml视图有一些疑问。在我的代码中,我有这样的东西:

@model MyCorp.EarlyWarnings.WebInterface.Models.HomePageModel

那么这到底是做什么的呢?

我认为我包括这个HomePageModel作为当前视图的模型,所以这个类的实例对象包含了我必须在这个视图中显示的所有信息。这个解释正确吗,还是我遗漏了什么?

另一个疑问是:谁填充了这个模型?它是否由视图的特定控制器填充?

@model关键字在asp.net中有什么作用?. NET MVC视图

你必须记住的是,Razor View引擎将你的CSHTML页面编译成普通的c#类。

所以当你定义

@model Something

Razor实际上产生了类似

的东西
public class _Path_To_View_cshtml : WebViewPage<Something>
{
    // mcguffins to make everything happen
}

然后在这个类中,所有的东西都是从CSHTML页面"倒过来的"。所以当你写

<div>@Model.Foo</div>
在CSHTML中的

,这将被翻译成类似于

的内容
WriteLiteral("<div>");
Write(Model.Foo);
WriteLiteral("</div>");

关于视图从哪里被调用的问题的第二部分,任何控制器动作都可以通过在结果中提供视图的路径来调用视图(至少在同一个应用程序中):

return this.View("~/path/to/view", someModel);

默认是,如果返回

return this.View(someModel);

使用的路径将是~Views/ControllerName/ActionName.cshtml

我认为我包括这个HomePageModel作为当前视图的模型,所以一个对象是这个类的实例包含了我必须在这个视图中显示的所有信息,它的解释是正确的还是我错过了什么?

是的,你理解对了。

是由视图的特定控制器填充的吗?

是的,它是由该视图的特定控制器的特定操作填充的。

. NET MVC中,控制器可以将强类型模型传递给它的视图。这可以通过在控制器方法中使用以下代码来完成:

public ActionResult Show()
{
    MyModelClass model = new MyModelClass()
    return View(model);
}

然后,为了访问视图中的强类型模型,您需要首先定义(在视图中)它所期望的模型类型。这是通过在视图文件的顶部包含一个@model指令来完成的:

@model Full.Namespace.MyModelClass

这允许视图以强类型的方式访问你的模型属性,通过使用你的模型属性:

@Html.DisplayFor(model => model.MyProperty)