【问题标题】:Is an ASP.net MVC View a "class"?ASP.net MVC 视图是“类”吗?
【发布时间】:2012-03-28 22:19:14
【问题描述】:

...首先,我这样做只是出于好奇。这里没有实际应用,只是为了了解和修补......

ASP.NET 视图具有 ModelViewData 等属性,甚至还有方法。

您甚至可以像使用常规 class.cs 文件一样使用@Using

我知道它的类型是WebPageView<TModel>

我的主要问题是:这是一门课吗?

应该是因为它是一个类型,但是..

那么我应该也能做到这一点(Razor 引擎):

@{
   public class Person
   {
       //etc...
   }

   var p = new Person();
}

<span>@p.Name</span>

但是我不能……为什么?

注意:目前是 C#、ASP.net 初学者。

【问题讨论】:

  • 它是now open sourced,所以你现在可以find out directly
  • 技术上的答案是,视图代码被放入方法体中。而且你不能在那里上课。但是为什么要在视图中定义类呢?这听起来很可疑。
  • @dtryon 太棒了!!谢谢你的好消息:)
  • @CodeInChaos 谢谢。如果您能在此处详细说明它作为答案,我会很高兴...我知道这没有真正的用处,但我只是想更多地理解它。
  • @CodeInChaos,functions 关键字呢?

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


【解决方案1】:

当然,您需要使用 functions 关键字来下拉以公开类级别的内容,例如字段、属性、方法和内部类型:

@functions {
   public class Person
   {
       public string Name { get; set; }
   }
}

@{
   var p = new Person();
}

<span>@p.Name</span>

这会很好用。

话虽如此,请记住,这些内部类的唯一目的是如果您需要定义一个仅在视图中使用的类型。我自己,我从来没有发现需要在课堂上这样做。但是,我利用这种技术添加了 helper 方法在语法上不可能的新方法。

【讨论】:

  • 哇!以前从未见过functions 关键字。它确实编译!谢谢:)
  • @JanCarloViray 请考虑将选择的答案切换到这个答案。
  • @JanCarloViray 请注意 CodeAngry 的建议。
【解决方案2】:

您不能这样做,因为 Razor 标记在从 WebViewPage 或 WebViewPage

派生的生成类中的 方法 内编译成一系列语句

不过,更重要的问题是,您为什么要这样做?相反,更愿意让 Razor 摆脱这种逻辑——它的工作应该是生成布局,而不是做任何类型的业务逻辑或业务数据转换。在您的操作方法中完成所有繁重的工作,并提供一个模型,该模型描述了以只需要简单的 Razor 标记即可处理的格式呈现布局所需的数据。

有很多教程描述了如何处理 MVC 和 Razor。我挖出了这个简短但合理的工作,涵盖了一个可能有助于您了解这个想法的端到端故事。它确实包括使用 EF 来获取数据,这可能比您讨价还价的更多 - 但值得一读以全面了解整个架构如何连接在一起:http://weblogs.asp.net/shijuvarghese/archive/2011/01/06/developing-web-apps-using-asp-net-mvc-3-razor-and-ef-code-first-part-1.aspx

【讨论】:

    【解决方案3】:

    是的,视图就是类。它们被编译成一个临时程序集(因此它们无法访问主程序集的内部成员,这在处理动态/匿名类型时很高兴知道)。

    我认为 Razor 有一个不允许声明内部类的规则,没有检查。

    【讨论】:

      猜你喜欢
      • 2011-02-23
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 2010-10-31
      • 1970-01-01
      相关资源
      最近更新 更多