【问题标题】:VB strongly typed model access in MVC4MVC4中的VB强类型模型访问
【发布时间】:2013-07-16 00:06:36
【问题描述】:

我正在使用 MVC 4 在 VB 中创建一个 Web 应用程序。我一直在查看许多强类型视图的在线示例,但没有找到真正解释模型访问的示例。 VB 中对 MVC 的支持和内容量总体上是可怕的。

这是我用来创建强类型视图的“项目”对象:

Public Class Project
    Public Property ProjectID
    Public Property Client
    Public Property Description
    ...
End Class

这是使用该模型的强类型视图之一:

@ModelType MvcApplication1.Project
...
<div class="display-label">
    @Html.DisplayNameFor(Function(model) model.ProjectID)
</div>
<div class="display-field">
    @Html.DisplayFor(Function(model) model.ProjectID)
</div>
...

由于网上的例子,我只知道如何调用模型;该功能对我来说毫无意义。当我将鼠标悬停在 DisplayNameFor 上时,Intellisense 会给我以下描述:

<Extension> Public Function DisplayNameFor(Of Integer)(expression as System.Linq.Expressions.Expression(Of System.Func(Of MvcApplication1.Project, Integer))) As System.Web.Mvc.MvcHtmlString
Gets the display name for the model.

这是我正在使用的吗?如果是这样,它看起来一点也不像“(Function(model)model.ProjectID)”,为什么调用的参数之间有空格?我会很感激任何澄清,我提前为这不在 C# 中道歉。

【问题讨论】:

    标签: asp.net-mvc vb.net asp.net-mvc-4 strongly-typed-view


    【解决方案1】:

    视图使用一个名为WebViewPage 的类。这就是视图。您可以访问名为Model 的对象的原因是因为这个(注意它是类的属性)。您可以随时通过 @Model 在 Razor 视图中访问模型。

    @Html 是我们从 Razor 视图访问 Html 助手 (HtmlHelper) 的方式;对于为我们生成一些 HTML 很有用。 DisplayNameFor() 是众多扩展方法之一。

    它想要的那个长而可怕的参数实际上相对简单。基本上它希望你给它一个匿名函数。这种技术称为Lambda Expression。在 C# 中(用于比较)它可能看起来像这样:

    SomeMethod(x => x.SomeProperty);
    

    它基本上是一种在现场(通常在一行上)创建函数并使用属性执行某些操作的快捷方式。对于 Html 对象,它的方法通常需要一个涉及模型的 lambda 表达式。

    为什么要这样?

    因为它给了你巨大的力量。通过使用函数,您可以在其中执行任何操作以及涉及对象(参数)的任何操作。

    例如:

    @Html.LabelFor(Function(f) f.Projects.SingleOrDefault(Function(g) g.Id = 5))
    

    这是做什么的?

    1. 我使用 @Html 访问视图的 HtmlHelper 对象。
    2. 我正在使用LabelFor的方法来生成&lt;label for=""&gt;标签。
    3. 我开始我的 lambda 表达式并为我的参数命名。它可以是我想要的任何名称,助手会自动给我模型(它旨在做到这一点)。在这种情况下,我将其命名为 f
    4. 现在我有了对象f,我需要选择要为其生成标签的对象。在此示例中,假设我的模型不是 Project,而是包含项目数组/列表的不同对象。
    5. 我选择项目列表 (f.Projects),然后我想选择一个项目。我用SingleOrDefault() 做到这一点。 SingleOrDefault 接受另一个 lambda,这一次它知道将项目列表作为参数传递。我将把这个项目列表称为g
    6. 现在有了项目列表,我将最终选择哪个对象。

    最后的陈述,转成英文的意思是:

    给定模型中名为“f”的项目列表,将它们全部取出并选择一个名为“g”的项目,其中项目的 Id 等于 5,并生成一个 HTML 标签。

    【讨论】:

    • 感谢您的澄清,这真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    相关资源
    最近更新 更多