【问题标题】:How can I re-use the model type from a view in the view?如何从视图中的视图重用模型类型?
【发布时间】:2012-02-27 22:41:26
【问题描述】:

如何重用我声明的模型类型?在视图的顶部有声明

@model mySpace.viewModels.viewModel

我想要在页面后面做一些类似的事情

@for( viewModel vM in ViewBag.viewModels )
{
 //some foo bar
}

【问题讨论】:

    标签: c# asp.net-mvc-3 razor viewmodel


    【解决方案1】:

    如果您已经有一个强类型视图,那么您真的不应该考虑 ViewBag/ViewData。一旦你有一个视图模型的强类型视图,你在这个视图中所要做的就是使用这个视图模型的属性,就像这样:

    @foreach (viewModel vm in Model.SomeSubModels)
    {
        //some foo bar
    }
    

    或者更好的是,为了避免视图中出现可怕的foreach 循环,您可以使用编辑器模板(如果您需要编辑某些属性):

    @Html.EditorFor(x => x.SomeSubModels)
    

    或使用显示模板(如果您只想向用户显示视图模型属性的值):

    @Html.DisplayFor(x => x.SomeSubModels)
    

    以下是设计 ASP.NET MVC 应用程序时要遵循的几个基本规则(按此顺序):

    1. 您忘记了 ViewBag/ViewData。就好像他们不存在一样。您只需将它们从存在中抹去。如果您忘记它们,您将真正为自己服务。
    2. 您定义了一个视图模型,它是一个包含视图所需的所有属性的类。
    3. 您的控制器操作查询您的存储库和域模型,并将结果映射到将传递给视图的视图模型。
    4. 在相应的视图中,您只需使用控制器操作提供的视图模型的属性来显示一些信息。

    第 1 条规则是真正的基础,也是最重要的一条。如果你不遵守这条规则,你就真的没有正确地使用 ASP.NET MVC。

    【讨论】:

    • 我有一个列出项目的视图,还允许创建项目。当用户希望创建一个项目时,我不想回发整个列表,这就是为什么在这种情况下,我选择不使用强类型视图模型,因为我不想只重新发布整个列表添加一项。
    • @TravisJ,绝对没有您应该选择在 ASP.NET MVC 中不使用强类型视图模型并且应该选择使用 ViewBag/ViewCrap 的情况。视图模型是要走的路。他们会解决你遇到的每一个问题。只是不要害怕向您的项目添加新类。
    • 如果用[httppost] 装饰的控制器接受了viewmodel,并且viewmodel 被传入了带有完整列表的视图,那么该列表是否也会被发布?
    • 我最关心的是发帖的速度。
    • @TravisJ,我完全不知道你在说什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2017-10-04
    • 1970-01-01
    相关资源
    最近更新 更多