0

我整个早上都在戳这个,我似乎找不到这样做的方法。

我有一个 Web 应用程序,它必须在它的一个 div-s 上显示一个工具提示。工具提示的内容来自一些数据库查询

< 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: Expected class, delegate, enum。

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

我尝试用 <%# 替换 <%= 并尝试 <% Response.Write(dbCount>0 ? "some" : "none") %> 并得到相同的错误。这是我正在编辑的 aspx 中唯一的一行,因此错误是由它引起的,而不是页面上的其他地方。

我可以使用 <% if(...){ 构造,但是设计师在找到关闭的 div 时遇到了麻烦,我不想用太多垃圾污染源,我宁愿保留原始版本。

您知道为什么会出现编译器错误吗?如何防止它并使用输出表达式 <%= devCount>0?"some":"none" %>?

4

3 回答 3

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;            

        }
    }
}
于 2012-08-01T16:43:51.900 回答
0

我创建了一个测试网络应用程序,您的代码 (<%=dbCount > 0 ? ""+dbCount : "No " %>) 工作正常(我假设 "< div" 是一个错误类型)。我假设 dbCount 是一个 int 而 devVersion 是一个字符串。还有其他事情吗?dbCount 是调用方法的公共属性吗?它是一个公共变量吗?

您的应用程序中的 dbCount 是什么?

于 2012-08-01T16:45:06.983 回答
0

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

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

参考:嵌入式代码块

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">
于 2012-08-01T18:30:22.067 回答