2012-04-04 17 views
0

asp.netサーバーからjavascriptに変数を渡すつもりですが、例外があります。javascriptへのasp.net変数の受け渡しが失敗しました

名 'シリアライザは、' 私のAdmin.aspx.csマークアップコードで次に

protected static string urlEdit; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // blah blah... 
     var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
    } 
では現在のコンテキスト には存在しません

<script type="text/javascript"> 
      function Edit_Click() { 
       var options = SP.UI.$create_DialogOptions(); 


       options.url = <%= serializer.Serialize(urlEdit) %>; 

           }; 
+0

あなたの変数が生成されたページのマークアップにアクセスできるので、Page_Loadの外でそれを宣言する必要があります。私は隠されたフィールドでより良い方法と考えられる解決策を提示しました。 – ericosg

+0

@ericosg隠しフィールドは良い練習ではありません... – Snuffleupagus

+0

@ user1090190なぜ隠されたフィールドの良い練習ではありませんか? – jrummell

答えて

1

serializerのような変数を使用することができます。マークアップからシリアライザにアクセスする代わりに、シリアライズされた値を代わりに返すパブリックメソッドまたはプロパティを作成しないでください。

protected static string urlEdit; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    // blah blah... 
    var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
} 

public string GetSerializedUrl() 
{ 
    return serializer.Serialize(urlEdit); 
} 

次に、あなたのマークアップでこのメソッドを呼び出します。

options.url = "<%= GetSerializedUrl() %>"; 

更新

実は...あなたはそれをJavaScriptを使用する文字列をシリアル化する必要はありません。だからあなたのコードは、次のように簡略化することができます

protected static string urlEdit = "www.example.com"; 

と簡体マークアップ:

options.url = "<%= urlEdit %>"; 
1

トライラッピング引用符で囲んだので、JavaScriptは文字列として表示されます...

options.url = '<%= serializer.Serialize(urlEdit) %>'; 

レンダリングするでしょうあなたのコード...私のレンダリングと同じように

options.url = site.com/url;//invalid javascript 

...

個人的に
options.url = 'site.com/url';//valid javascript 
+0

まだ間違っています。ありがとう –

+0

それは正しい方向の一歩です。おそらく、あなたの文字列にエスケープ文字がありますか? '\\'(バックスラッシュ)のようなものですか?また、javascriptのエラーはありますか? – musefan

+0

私は '\'を持っています。 JavaScriptエラーはありません。 –

-2

が、私はそれが簡単に行うには隠されたフィールドを利用するために見つけますジョブ。

すなわち

マークアップ(.aspxの)背後

<asp:HiddenField ID="hiddenRequest" runat="server" ClientIDMode="Static" /> 

コード(.aspx.cs)

hiddenRequest.value = "Test!"; 
string test = (string)hiddenRequest.value; 

Javascriptを(簡単に選択のための)jQueryを使って(.jsファイル)

$('#hiddenRequest').val('Test!'); 
var test = $('#hiddenRequest').val(); 
+0

私は個人的な選択を述べる前にそれがより良い習慣であると信じている理由について精緻化したはずです。 – ericosg

0

serializerは、Page_Load関数内にのみ存在します。インラインコードがそれを認識するためには、クラスの名前空間で宣言する必要があります。

protected static string urlEdit; 
protected var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
protected void Page_Load(object sender, EventArgs e) 
{ 
} 

でも、options.urlは引用符で囲む必要があります。

+0

これはグローバルではなく、クラスの公開フィールドです。 – jrummell

0

通常の代わりに、これはコードのこのブロックは、あなたのスクリプトで、あなたのページのロード方法

であるべきこと

ClientScript.RegisterClientScriptBlock(this.GetType(), "variable", "<script language=javascript> var variableUrl='" + urlEdit+"' </script>"); 

ノート値ではJavaScriptに値を挿入変数をシリアル化するために、あなただけのPage_Loadに存在するこの

<script type="text/javascript"> 
     function Edit_Click() { 
      var options = SP.UI.$create_DialogOptions(); 


      options.url = variableUrl; 

          }; 
関連する問題