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

时间:2010-11-23 06:02:50

标签: asp.net-mvc asp.net-mvc-3 razor

我试图使用以下声明:

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

然而,Razor正在窒息&lt;在ISQL之前。

任何正式的工作吗?

5 个答案:

答案 0 :(得分:96)

要使用泛型方法,您需要转义表达式

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

答案 1 :(得分:14)

当我在升级mvc时遇到“同样的错误”时,我才发现这个问题。

我有:

不起作用:

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

显然,语法更严格,而且当你在@ {}块中时,你不应该在示例上的Model.Title之前添加@。但是代码编辑器上的错误指向了泛型,这让我很疯狂。

如果没有&lt;&gt;它可以正常工作在代码中,但只是从Model.Title中删除@修复了问题。

<强>使用:

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

希望这对任何人都有帮助

答案 2 :(得分:6)

我很欣赏这个'答案'有些晚了,这个问题显然已经得到了令人满意的答案。但是,对于此页面的任何未来访问者,如果您正在阅读更完整的参考指南,那么MS introduction to Razor syntax以及Phil Haack非常有用的Razor quick reference博客文章。

答案 3 :(得分:4)

当我在一个@{ ... } bock中进行了多次任务时,我遇到了一个奇怪的案例。

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

我做过什么,总是有错误,比如:

  

使用通用类型&#39;列表&#39;需要一个类型参数

解决方案: 我将分配行设置为第二个 @{ ... } bock

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

答案 4 :(得分: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>(); }