@model关键字在ASP.NETMVC视图中有什么作用?

bpsygsoo  于 2023-05-19  发布在  .NET
关注(0)|答案(3)|浏览(121)

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

@model MyCorp.EarlyWarnings.WebInterface.Models.HomePageModel

这到底是做什么的
我认为我将这个HomePageModel作为当前视图的模型包含在内,因此作为此类示例的对象包含了我必须在此视图中显示的所有信息。这个解释是正确的,还是我遗漏了什么?
另一个疑点是:谁来填充这个模型?是否由视图的特定控制器填充?

lf5gs5x2

lf5gs5x21#

你必须记住的是,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

hof1towb

hof1towb2#

我认为我包含了这个HomePageModel作为当前视图的模型,所以这个类的示例对象包含了我必须在这个视图中显示的所有信息,它的解释是正确的还是我遗漏了什么?
是的,你的解释是正确的。
是否由视图的特定控制器填充?
是的,它由该视图的特定控制器的特定操作填充。

7xzttuei

7xzttuei3#

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

public ActionResult Show()
{
    MyModelClass model = new MyModelClass()

    return View(model);
}

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

@model Full.Namespace.MyModelClass

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

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

相关问题