ASP.NET表达式<%= ...%>与C#表达式一起使用时,会出现错误CS 1518

时间:2012-08-01 16:31:34

标签: asp.net compiler-errors

我整个上午一直在盯着这个,我似乎无法找到办法。

我有一个网络应用程序,必须在其中一个div上显示工具提示。工具提示的内容来自某些数据库查询

< div style =“height:10px; clear:both;” title =“<%= dbCount%>此组中版本<%= devVersion%>的设备”>

这很好用。

如果我尝试用表达式替换<%=dbCount %>

< div style="height: 10px; clear: both;" title="<%=dbCount > 0 ? ""+dbCount : "No " %>  device(s) with version <%=devVersion %> in this group">

然后在PageLoad上我得到一个例外CS1518:期望的类,委托,枚举。

我如何构造表达式并不重要,如果我放括号或不使用括号,如果我使用String.Format或三元表达式 - 除了仅使用变量名之外,任何类型的表达式都会导致错误。

我尝试将&lt;%=替换为&lt;%#并尝试&lt;%Response.Write(dbCount&gt; 0?“some”:“none”)%&gt;我得到了同样的错误。这是我正在编辑的aspx中的唯一一行,因此错误是由它引起的,而不是页面上的其他地方。

我可以使用&lt;%if(...){构造但是设计师在查找结束div时遇到了麻烦,我不想用过多的垃圾污染源,我宁愿保持原始版本。

你知道为什么编译器错误出现了吗?如何防止它并使用输出表达式&lt;%= devCount&gt; 0?“some”:“none”%&gt;?

3 个答案:

答案 0 :(得分:0)

所有这些变种在这里运行正常,在C#样本中,我包括你提到的运行良好的情况:

在VB.NET中

标记:

<body>
    <form id="form1" runat="server">
    <div id="<%If dbCount = 1 Then%><%="22"%><%Else%><%="55"%><% End If%>">   
    <%=dbCount.ToString()%>
    </div>
    </form>
</body>

代码隐藏:

Partial Class varIn
    Inherits System.Web.UI.Page

    Public dbCount As Short = 0

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

         If Not Page.IsPostBack Then
           dbCount = 1
         End If

    End Sub    
End Class

在C#中

标记:

<div id="<%if (dbCount == 1) { %><%="22"%><%;}else{%><%="55"%><%;}%>">   
<%=dbCount.ToString()%>
</div>

或者:

<div id="<%=dbCount > 0 ? ""+dbCount : "No " %>">   
<%=dbCount.ToString()%>
</div>

代码隐藏:

public partial class _Default : System.Web.UI.Page 
{

    public short dbCount;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            dbCount = 1;            

        }
    }
}

答案 1 :(得分:0)

我已经创建了一个测试网络应用,你的代码(&lt;%= dbCount&gt; 0?“”+ dbCount:“没有”%&gt;“工作正常(我假设”&lt; div“是一个错误的)。我假设dbCount是一个int而devVersion是一个字符串。还有其他事情发生吗? dbCount是一个调用方法的公共属性吗?它是公共变量吗?

您应用中的dbCount是什么?

答案 2 :(得分:0)

不要写那样的代码。 Aspx文件仅支持向后兼容性。

如果你真的必须这样做,那就只写一下公共属性。

参考:Embeded code blocks

  

ASP.NET网页主要支持嵌入式代码块   保持与旧ASP技术的向后兼容性。一般来说,   使用嵌入式代码块来实现复杂的编程逻辑并不是最好的   实践,因为当代码在页面上与标记混合时,它   可能很难调试和维护。另外,因为代码   只在页面的渲染阶段执行,你有   与代码隐藏或脚本块相比,灵活性大大降低   将代码范围限定到页面处理的适当阶段的代码。

也就是说,该链接确实向您展示了如何正确使用嵌入代码。

如果你真的必须这样做,请使用Response.Write。

< div style="height: 10px; clear: both;" title="<% 
  { 
    string countMessage = dbCount > 0 ? ""+dbCount : "No "; 
    Response.Write(countMessage ); 
  }
%>  device(s) with version <%=devVersion %> in this group">