【问题标题】:Using keywords in asp.net mvc3 views在 asp.net mvc3 视图中使用关键字
【发布时间】:2012-04-05 21:28:55
【问题描述】:

我正在使用 MVC3 框架来设计一个网站。我从 ms sql 数据库中提取控制器中的数据,表中的一列被命名为“do”。当我尝试使用@Model 关键字(例如:@Model.do)创建一个显示信息的视图时,我得到一个错误:

需要标识符; do 是一个关键字。

我想知道是否有办法在 MVC3 视图中使用列名(C# 中的关键字),还是只能选择重命名数据库表中的列?

谢谢!!

【问题讨论】:

    标签: c# asp.net-mvc-3 keyword asp.net-mvc-views


    【解决方案1】:

    在 C# 中使用任何关键字的方式是在其前面加上“@”前缀。例如,你会经常看到这种情况

    @Html.ActionLink("My Link", "Action", null, new {@class="abc"}) 
    

    将“class”属性添加到“a”标签。这是合法的代码:

    class Program
    {
        static void Main(string[] args)
        {
            Entity e = new Entity();
            e.@do = 10;
        }
    }
    
    class Entity
    {
        public int @do
        {
            get;
            set;
        }
    }
    

    也是这样

    public void DoSomething(int @do)
    {
        for (int i = 0; i < @do; i++)
        {
            // process i
        }
    }
    

    如果您使用 ASPX 作为您的视图引擎,则可以:

    <%= Model.@do %>
    

    在 Razor 视图中,以下也是有效的:

    @Html.Raw(Model.@do)
    

    @(@Model.@do)
    

    【讨论】:

      【解决方案2】:

      无法在视图模型(.cs 类)中定义变量 do

      "Error 1 Invalid token 'do' in class, struct, or interface member declaration"
      

      话虽如此,您可以在模型中重新映射,以便将列 do 映射到字段 do_field

      public class Entity
      {
       [Column("do")]
       public string do_field { get; set; }
      }
      

      【讨论】:

      • 感谢您的回复。虽然我使用实体框架模型来访问数据库,但我仍然可以在其中进行重新映射。
      • @Learner - 这是正确的。您定义的 EF 使用的模型可以在其中包含此数据注释。或者,您可以使用 fluent api (msdn.microsoft.com/en-us/library/hh295844(v=vs.103).aspx) 来定义映射。
      • @WernerStrydom - 正确的是显示了使用关键字显示的错误,并显示了如何重新映射实体。我没有意识到 @ 可以用作这样的转义属性,所以这里唯一不正确的陈述更不完整,因为正如您的回答所述,您可以使用 @ 符号转义关键字。
      • @TravisJ 我认为你给出了很好的建议。我的回应是针对你的第一句话。
      • @WernerStrydom:我尝试了您的转义关键字的建议,效果非常好。感谢您为该问题提供替代解决方案!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多