2012-04-26 15 views
0

私は何をしようとしているのかに最適なアプローチを得たいと思っていました。私は別のデータベースから私たちのデータベースにインポートして情報をリンクするデータベースにsprocを持っています。リンクされた情報が欠落していると、ユーザーによって解決されたエラーが生成されます。私のコードビハインドでは、私はこれらのエラーを取得している、私は各エラーの行を追加するHTMLテーブルを作成します。今私はこの情報を複数のページにまたがって保存したいので、これをセッションの中に保存しています。グリッドのようなヘビーデューティコントロールではなく、ちょうどhtmlテーブルなので、セッションやその他の方法でHTMLテーブルを保存するのに最も良い方法は何ですか?そして私は、クライアント側のJavaScriptやjQueryのでこれをアクセスすることができますどのように私は、この情報をここにセッションに格納されたhtmlテーブルへのアクセス

protected void BtnAddDock1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      HtmlGenericControl RadDocksDiv = (HtmlGenericControl)Master.FindControl("RadDocksDiv"); 
      RadDocksDiv.Style["display"] = "block"; 

      Session["Docking"] = "Open"; 

      Table tblErrors = new Table(); 
      tblErrors.ID = "tblErrors"; 
      tblErrors.CssClass = "tabularData"; 
      tblErrors.Width = 800; 
      TableHeaderRow hr = new TableHeaderRow(); 
      // hr.ID = "tblErrorsHeaderRow"; 
      TableHeaderCell thc = new TableHeaderCell(); 
      //thc.ID = "tblErrorsHeaderCell"; 
      thc.Text = "Error Descriptions"; 
      hr.Cells.Add(thc); 
      tblErrors.Rows.Add(hr); 
      Panel pnlErrors = (Panel)Master.FindControl("pnlErrors"); 

      Table dobleTable = (Table)Master.FindControl("tblErrors"); 

      if (dobleTable == null) 
      { 
       pnlErrors.Controls.Add(tblErrors); 



       for (int i = 0; i < 10; i++) 
       { 
        TableRow tableRow = new TableRow(); 
        string error = "This is a website generated Import Error that needs to be added to the panel on Masterpage!"; 
        TableCell tableCell = new TableCell(); 
        tableCell.Text = error; 
        tableRow.Cells.Add(tableCell); 
        tblErrors.Rows.Add(tableRow); 
       } 


       Session["ErrorsTable"] = tblErrors; 
      } 
      //Table tblErrors = (Table)Master.FindControl("tblErrors"); 


     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

とは、私はJavascriptが、すべて私にこれを取得しようとしていますどのようにされて表示する拡張可能なdiv要素を示すために、jQueryの機能を利用することができますセッションから取得しようとするとSystem.Web.UI.WebControls.Tableだけが表示されます。

//Access html table in session 
    var dockingState = '<%= Session["Docking"] %>' 

    if (dockingState == "Open") { 

     // This doesnt return the html table correctly?!? 
     var sessiontblErrors = '<%= Session["ErrorsTable"] %>' 

     if (sessiontblErrors != null) { 
      var pnlErrors = $("[id$=pnlErrors]"); 

     } 
    } 

答えて

3

あなたが本当にページにまたがって表示するようにセッションのエラーを維持したい場合は、私はこの方法でそれを行うだろう。 HTMLテーブルを作成してセッションに保存する代わりに、セッションのエラーのリストを作成し、必要なときにいつでもアクセスして、必要なフォーマットで表示することができます。それは、私は単に私のエラーメッセージ

public class ErrorMessage 
{ 
    public string ErrorCode { set;get;} 
    public string Message { set;get;} 
} 

とあなたのコードでは、代わりにHTMLテーブルの行を作成するのを保持するクラスを作成します

...、順序付きリスト、スパンなどのHTMLテーブルすることができ私はこれをリストに追加します

List<ErrorMessage> objErrorList=new List<ErrorMessage>(); 

for(int i = 0; i < 10; i++) 
{ 
    ErrorMessage objError=new ErrorMessage(); 
    objError.ErrorCode=5020; 
    objError.Message="There is such a bad error!"; 
    objErrorList.Add(objError); 
} 
if(objErrorList.Count>0) 
{ 
    Session["Errors"]=objErrorList; 
} 

そして、いつでも私はこれをセッションから返すことにします。私はこれを関数で囲みます。

public List<ErrorMessage> GetErrors() 
{ 
    List<ErrorMessage> objList=new List<ErrorMessage>(); 
    if(Session["Errors"]!=null) 
    { 
    objList=(List<ErrorMessage>)Session["Errors"]; 
    } 
    return objList; 
} 

あなたがJavaScriptからこれをしたい場合、あなたはjQueryのAJAX/getJsonを使用してサーバーページ(aspxページ/ ASHXハンドラ)への呼び出しを行うことによってそれを得ることができます。このようなもの。

var strErrors="<ul>"; 
$.getJSON('geterrors.ashx', function(data) { 
    $.each(data, function(key, val) { 
     strErrors+="<li>" + val + "</li>"; 
    }); 
}); 
strErrors+="</ul>"; 

$("#yourMsgDiv").html(strErrors); 

geterrors.ashx

は、あなたが私たちのGetErrorsメソッドを呼び出して、そのtoJSon形式を変換して返します。

このアプローチの主な利点は、プレゼンテーションがデータに密接に関連していないことです。さまざまなスタイルでエラーメッセージを表示できます。

+0

こんにちはShyju私はこれを試しています.Hhvntはashxハンドラで働いていましたが、WebサービスコールでJsonを試しましたが、Javascriptでデータを取得していないのですが、ここにServices.asmxがあります。 – Shokwave

+0

@ Shokwave:私はあなたに関連する詳細とそれについて別の質問を投稿することをお勧めします。だから人々があなたを助けます。 – Shyju

+0

@Shokwave:どのような呼び出しが行われ、どのような応答が戻ってくるかを確認するには、firebug/fiddlerを使用します。 – Shyju

0
0

まず、大きな誤解があります。

Sessionは、オブジェクトのシリアル化された文字列表現を格納します。

Session["ErrorsTable"] = tblErrors; 

あなたがあなたのC#コードtblErrorsが等しくないをしていることを理解することは非常に重要です:

<table><tr><td>...</td></tr></table> 

tblErrorsはオブジェクトであり、そしてそれは、他のC#クラスのように、クラスを持っています。 (言い換え)ページがクライアントに送信するためにasp.netによってレンダリングされるとき、そのクラスはをhtmlに変換します。しかし、クラスのインスタンスをSessionに入れると、それはあなたが得るものではありません。実際のオブジェクトを格納しています。Sessionはシリアル化され、逆シリアル化されます。

私はこれが助けてくれることを願っています。これは難しい話題です。

1

私は実際にこのラインTable tblErrors = new Table();がASP.NETサーバー側の制御であるSystem.Web.UI.WebControls.Tableを作成し、各エラー

の行を追加するHTMLテーブルを作成します。

実際にHTMLテーブルを作成する場合は、Renderメソッドを使用してHTMLを生成する必要があります。それはShyjuがデータからのプレゼンテーションをお勧めし、削除するので、あなたがすべきことだと私は言った。

関連する問題