对于如何将**@model语句转换为cshtml**视图,我有一些疑问。在我的代码中,我有这样的东西:
@model MyCorp.EarlyWarnings.WebInterface.Models.HomePageModel
这到底是做什么的我认为我将这个HomePageModel作为当前视图的模型包含在内,因此作为此类示例的对象包含了我必须在此视图中显示的所有信息。这个解释是正确的,还是我遗漏了什么?另一个疑点是:谁来填充这个模型?是否由视图的特定控制器填充?
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
~Views/ControllerName/ActionName.cshtml
hof1towb2#
我认为我包含了这个HomePageModel作为当前视图的模型,所以这个类的示例对象包含了我必须在这个视图中显示的所有信息,它的解释是正确的还是我遗漏了什么?是的,你的解释是正确的。是否由视图的特定控制器填充?是的,它由该视图的特定控制器的特定操作填充。
7xzttuei3#
在ASP.NETMVC中,控制器可以将强类型模型传递给它的视图。这可以通过控制器方法中的以下类型的代码来完成:
public ActionResult Show() { MyModelClass model = new MyModelClass() return View(model); }
然后,为了在视图中访问强类型模型,您需要首先(在视图中)定义它所期望的模型类型。这是通过在视图文件的顶部包含一个@model指令来完成的:
@model
@model Full.Namespace.MyModelClass
这允许视图通过使用模型属性以强类型的方式访问模型属性:
@Html.DisplayFor(model => model.MyProperty)
3条答案
按热度按时间lf5gs5x21#
你必须记住的是,Razor View引擎会将你的CSHTML页面编译成普通的C#类。
所以当你定义
Razor实际上生产的东西
然后在这个类中,所有内容都从CSHTML页面“反转”。所以当你写的时候
在您的CSHTML中,这将被转换为类似于
关于你的问题的第二部分,关于从哪里调用视图,任何控制器动作都可以通过在结果中提供视图的路径来调用视图(至少在同一个应用程序中):
默认情况是,如果返回
使用的路径为
~Views/ControllerName/ActionName.cshtml
hof1towb2#
我认为我包含了这个HomePageModel作为当前视图的模型,所以这个类的示例对象包含了我必须在这个视图中显示的所有信息,它的解释是正确的还是我遗漏了什么?
是的,你的解释是正确的。
是否由视图的特定控制器填充?
是的,它由该视图的特定控制器的特定操作填充。
7xzttuei3#
在ASP.NETMVC中,控制器可以将强类型模型传递给它的视图。这可以通过控制器方法中的以下类型的代码来完成:
然后,为了在视图中访问强类型模型,您需要首先(在视图中)定义它所期望的模型类型。这是通过在视图文件的顶部包含一个
@model
指令来完成的:这允许视图通过使用模型属性以强类型的方式访问模型属性: