0

私は今朝ずっと突っついていました、そして私はこれをする方法を見つけることができないようです。

divの1つにツールチップを表示する必要があるWebアプリがあります。ツールチップの内容は、いくつかのDBクエリから取得されます

<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または3値式を使用する場合は、式をどのように構成するかは関係ありません。変数名のみを使用する以外の任意の種類の式でエラーが発生します。

<%=を<%#に置き換えて、<%Response.Write(dbCount> 0? "some": "none")%>を試しましたが、同じエラーが発生します。これは私が編集しているaspxの唯一の行であるため、エラーはページの他の場所ではなく、それが原因です。

<%if(...){構文を使用することもできますが、デザイナーが終了divを見つけるのに問題があり、大量のジャンクでソースを汚染したくないので、元のバージョンを保持したいと思います。

コンパイラエラーが表示される理由と、それを防ぎ、出力式<%= devCount> 0を使用するにはどうすればよいですか? "some": "none"%>?

4

3 に答える 3

0

そのようなコードを書かないでください。Aspxファイルは、下位互換性のためにのみサポートしています。

あなたが本当にそれをしなければならないのなら、そのように公共の財産だけを書いてください。

参照:埋め込まれたコードブロック

埋め込みコードブロックは、主に古いASPテクノロジとの下位互換性を維持するためにASP.NETWebページでサポートされています。一般に、複雑なプログラミングロジックに埋め込みコードブロックを使用することはベストプラクティスではありません。コードがページ上でマークアップと混在している場合、デバッグと保守が困難になる可能性があるためです。さらに、コードはページのレンダリングフェーズ中にのみ実行されるため、ページ処理の適切な段階にコードをスコープする際のコードビハインドコードやスクリプトブロックコードよりも柔軟性が大幅に低下します。

そうは言っても、リンクは埋め込みコードを適切に使用する方法を示しています。

本当にこの方法で行う必要がある場合は、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 に答える
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

テストWebアプリを作成しましたが、コード(<%= dbCount> 0? "" + dbCount: "No"%>)は正常に機能します( "<div"はタイプミスだと思います)。dbCountはintであり、devVersionは文字列であると想定しています。他に何か起こっていることはありますか?dbCountは、メソッドを呼び出すパブリックプロパティですか?パブリック変数ですか?

アプリのdbCountとは何ですか?

于 2012-08-01T16:45:06.983 に答える