2016-10-19 10 views
0

の無効な声明私は、このASPXコードがある場合:のaspxファイル

<td> 
    <asp:TextBox ID="txtSolarValue" runat="server" Text='<%# Eval("SolarValue") %>' /> 
</td> 

<script runat="server"> 
var solarvalue = document.getElementById("ctl00_maincontent_FormView1_txtSolarValue"); 

if (solarvalue > 0) 
{ 
    void Button2_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      SendMail();        
     } 
     catch (Exception) { } 
    } 
} 
</script> 

しかし、イムこのエラーを取得:

error CS1519: Invalid token 'if' in class, struct, or interface member declaration 

を値> 0の方法であれば、私はちょうど機能を実行したいです私はそれを修正することはできますか?ありがとう

+1

このような空のキャッチブロックは絶対実行しないでください。少なくともログは例外です。また、C#コードをASPXページ内に埋め込むのは貧弱な方法です。 C#コードを格納する[コードビハインド](https://msdn.microsoft.com/en-us/library/015103yb.aspx)を作成します。 – mason

+0

私は混乱しています...トップはjavascriptのようですが、クリックハンドラはC#コードのように見えます。あなたは 'Button2_Click'ハンドラをjavascriptで実行できますか? @Kritner、はい。 – Kritner

+0

あなたは顧客側のサーバー側を行うことができます。@メイソン、私はここでこれを回避する必要があります。どのように私はキャッチとif文を修正することができますか? –

答えて

1

あなたはJavaScriptとC#コードを混在させています。彼らは手を携えていません。 HTMLとJSのイベントがクライアントに送信される(JavaScriptが実行される)前に、C#はサーバー上で実行されます。 JavaScriptではなくC#を使用してsolarValueを取得する必要があります。

また、C#ではメソッド本体の外側にif文を置くことはできません。メソッド本体の中のifステートメントを移動して、エラーを解決することができます。

<script runat="server"> 
    void Button2_Click(object sender, EventArgs e) //this method should be moved to code behind 
    { 
     var txtSolarValue = (TextBox) FormView1.FindControl("txtSolarValue"); //this is necessary because your TextBox is nested inside a FormView 
     var solarvalue = int.Parse(txtSolarValue.Text); //really need some error handling here in case it's not a valid number 

     if (solarvalue > 0) 
     { 
      try 
      { 
       SendMail();        
      } 
      catch (Exception) { } //do not do empty catch blocks! Log the exception! 
     } 
    } 
</script> 

空のキャッチブロックも削除する必要があります。少なくとも例外を記録し、黙ってそれらを飲み込まないでください。

最近の練習では、C#コードをcode behindという別のファイルに配置することに注意してください。これはJavaScriptとC#の区別をもう少し明確にします。

+0

これは私にとってははるかに明確です。私はCプログラマではありませんので、回避策を見つけようとしています。どのように私はCを使用しないでその値を得ることができますが、依然としてifステートメントを使用することができます。なぜなら、私はこれを持っているからです:エラーCS0103:名前 'txtSolarValue'は現在のコンテキストに存在しません。 –

+0

@Fresher CはC#ではありません。彼らは完全に異なる言語です。とにかく、あなたの質問のコード例は完全ではない、TextBoxが内部にあるFormViewを表示しません。あなたはそれを含めるためにあなたの質問を修正する必要があります。しかし、おそらく 'var txtSolarValue =(TextBox)FormView1.FindControl(" txtSolarValue ");' – mason

+0

のようなものでしょう。これはうまくいきました:var solarvalue = float.Parse(((TextBox)FormView1.FindControl( "txtSolarValue"))。Text); –

関連する問題