2011-08-20 84 views
2

请帮助我!我遇到使用Visual Studio 2008的 匿名类型Asp.net/WebForms在页面标记一个奇怪的问题,这会产生一个“类型应为”错误(只是一个例子):Asp.net WebForms错误与匿名类型

<%=new { property = "somevalue" }.ToString() %> 

甚至

<%var x = new { property = "somevalue" }; 
Response.Write(x.ToString()); %> 

如果我把这个方法,这工作得很好:

<%=ShowIt() %> 

...在代码隐藏...

public string ShowIt() 
{ return new { property = "somevalue" }.ToString(); } 

如何才能让Web窗体识别匿名类型/语法?
我试过谷歌。

请注意:我知道上面的代码不是很好的做法。在这个项目中,我似乎无法在标记中使用匿名类型AT ALL。 IE:甚至传递作为参数:

<%=ShowIt(new { prop1 = "a", prop2 = 2 }) %> 

似乎并不奏效。

+0

你已经回答了你自己的问题 - 把它放在一个方法中? – Smudge202

+0

谢谢 - 但是虽然我的简单示例在实践中没有意义 - 我实际上正尝试将匿名类型对象作为参数传递给方法(有点像MVC的HTML帮助器的工作方式)。对于这种情况及其特殊要求,这不是一个好的答案,但谢谢。 – aikeru

回答

0

我在web.config中发现了这个问题。很明显,它缺少在“system.codedom”标签下的“编译器”标签下对C#编译器的引用。

 <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <providerOption name="CompilerVersion" value="v3.5"/> 
     <providerOption name="WarnAsError" value="false"/> 
     </compiler> 
3

对于我来说,以下几点:

<%= new { property = "somevalue" }.ToString() %> 

输出匿名类型的结构:

{ property = somevalue } 

你试图输出 “财产” 的价值?

如果是使用以下命令:

<%= new { property = "somevalue" }.property.ToString() %> 

无论哪种方式,如上面Smudge202状态,你应该用后面方法的代码,你可以让你加价自我记录与良好的方法名。

+0

我上面的代码只是一个例子。实际上,我将一个匿名类型的对象传递给一个函数,有点像MVC的HTML帮助器的工作方式。也许这个项目的web.config有什么问题,或者如果这通常适用于WebForms/2008/ASP.net标记。 – aikeru