如何在Razor视图文件中使用通用语法?


70

我试图使用以下语句:

@Html.Test<ISQL>().Nand()

但是,Razor对ISQL之前的<感到窒息。

有官方解决方案吗?


...您是否因为没有将其放在代码块中而错过了某些东西?我看不到任何迹象……
Paul

Answers:


102

要使用通用方法,您需要对表达式进行转义

@(Html.Test<ISQL>().Nand())

15

我在升级mvc时正在寻找此“相同错误”时才发现此问题。

我有:

不起作用:

@{ 
   ViewBag.Title = "Something " + @Model.Title;
   var something = (IEnumerable<SelectListItem>)ViewBag.Options;    
}

显然,语法变得更严格,并且由于您位于@ {}块中,因此不应在示例的Model.Title之前添加@。但是代码编辑器上的错误指向通用,这让我发疯。

如果代码中没有<>,它可以正常工作,但是只需从Model中删除@即可。

作品:

@{ 
   ViewBag.Title = "Something " + Model.Title;
   var something = (IEnumerable<SelectListItem>)ViewBag.Options;    
}

希望这对任何人有帮助


我也为这个疯狂!“代码块缺少结束符}。”
SandRock 2014年

1
谢谢。确实有帮助-前一个@会在下一个语句中引起问题,而不是您直接指出的问题。
Darius 2014年

6

我很欣赏这个“答案”有些晚,而且这个问题显然已经令人满意(而且很好)得到了回答。但是,对于以后访问此页面的任何人,如果您正在寻找更完整的参考指南,则可以参考MS对Razor语法的介绍,以及Phil Haack非常有用的Razor快速参考博客文章。


5

当我在一个@{ ... }博克内完成多个任务时,我遇到一个奇怪的情况。

@{
    // ... other assignments (without error)
    List<string> stringList = new List<string>()  // ERROR MESSAGE HERE
}

我所做的一切总是存在错误,例如:

使用通用类型“列表”需要一个类型参数

解决方法:我将分配线放到第二个 @{ ... } 方框中

@{
    // ... other assignments
}
@{
    List<string> stringList = new List<string>()  // WORKS
}

2

关于@字符,此示例在升级之前有效

@{
    string @class = ViewBag.@class;
    IDictionary<string, object> htmlAttributes = new Dictionary<string, object>();
}

升级后,必须将其分为两个部分

@{  string @class = ViewBag.@class; }
@{  IDictionary<string, object> attrs = new Dictionary<string, object>(); }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.