2012-03-12 13 views
0

私はaspxページに次のように隠し変数を持っています。asp.netのhtml属性を読み取る

<input type="hidden" value="" runat="server" id="homeExcelData" filename=""/> 

ボタンをクリックすると、iamはa form.Sumbit();を実行します。

投稿する前に、私は以下のように隠しコントロールのプロパティを設定しています。背後にあるコードでは

document.getElementById("homeExcelData").attributes["filename"] = "test.xls"; 
          $("#homeExcelData").attr("filename","test.xls"); 
          $("#homeExcelData").prop("filename","test.xls"); 
          alert($("#homeExcelData").attr("filename")); 
          $("#homeExcelData").val(excelData); 

、ポストバック時に、私はJavaScriptで設定homeExcelData.ValueでexcelDataを得ることができます。

しかし、属性 "filename"の値は "test.xls"の代わりに空の文字列(nullではありません)として使用されています。

私はそれを修正するのを助けてください。

サーバー側のコード:

string fileName = homeExcelData.Attributes["filename"] ?? "report.xls"; 
+0

ポストパックで値が失われます。したがって、ViewStateに値を保持する必要があります。 – sinanakyazici

答えて

1

私のために上記の作品。私は何が起こっていることは価値が何らかの形で再初期化取得され、あなたの送信ボタンのポストバックで(属性を追加するための使いのブラウザではJavaScriptがサーバ側にそれを二度移動読み込んでいる私の作品)だと思いますなぜ

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     // Set attribute on page Load 
     homeExcelData.Attributes.Add("filename","test.xls"); 
    } 
} 

protected void btnCheckValues_Click(object sender, EventArgs e) 
{ 
    Response.Write(homeExcelData.Attributes["filename"].ToString()); 

} 
+1

コードビハインドで追加してもうまくいきます。私たちがjavascriptでそれを追加し、button_clickの代わりにfrom.Sumbit()を実行した場合に問題が発生します。 – Raghav

+1

アトリビュートと値のクライアント側を追加すると、ページ上にレンダリングが行われない可能性があります。 –

2

をということだと思いますfilename属性の値はサーバーへのPOST要求の一部でなければなりませんか?

(あなたがそれをサーバ側に設定した場合、それが唯一のビューステート値の一部となります)

私は別の隠しフィールド「homeExcelDataFileName」を持っているし、その値を使用します。

希望すると、

+0

そうです。しかし、form.Submit()が完了すると、ビューステートはaspxページでリフレッシュされ再構築され、サーバーに戻されます。 js経由でコントロールに値を追加すると、control.Valueとしてサーバーに送られます。つまり、特定のHTML属性の場合、ビューステートは再構築されます。しかし、カスタムHTML属性の場合、ビューステートはリフレッシュされません。 基本的に私はasp.netにカスタム属性を読み込ませ、コントロールのビューステートにパックするためのトリックが必要です。自動的にサーバーに送られます。 – Raghav

+0

それだけでなく、私はいくつかのカスタム属性を追加する必要があります。私はこれらの属性を複雑なjsonウィットとして私の価値を再考する必要があります。 – Raghav

+0

ビューステートはクライアントサイドで変更または再構築されるべきではありません。私が知る限り、submit()は投稿要求を発行する前にビューの状態を変更しません。 ViewStateMacは、(「無効なViewState」)を確認するのに役立ちます。 いくつかの隠しフィールドにデータを集め、エンコードし、 "パック"することができます。この値はサーバー側で復号化され、コントロール機能を変更します。 – jbl

関連する問題