2012-04-26 26 views
0

我想爲我想要做的事情找到最好的方法。我在數據庫中有一個sproc,它從另一個數據庫導入我們的並鏈接信息。如果缺少鏈接的信息,則會生成用戶解決的錯誤。在我的代碼隱藏中,我收到了這些錯誤,我創建了一個爲每個錯誤添加行的html表。現在我想要將這些信息保存在多個頁面中,因此我將它存儲在會話中,因爲它只是一個html表格而不是像網格這樣的重型控件,最好的方法是在會話中以任何其他方式存儲HTML表格我怎麼可以訪問此在Javascript或jQuery的客戶端上的,所以我可以使用jQuery函數來顯示一個可擴展的div顯示此信息在會話中存儲的訪問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但我得到這個可以看到只是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表格並存儲在會話中,而是在會話中創建一個錯誤列表,並在需要時訪問它,並以任何我想要的格式顯示它。它可以是一個HTML表格,編號列表,跨度等..

我會簡單地創建一個類來保存,而不是創建的HTML表格行我的錯誤消息

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

,並在您的代碼,我會添加到這個列表

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感謝您的好建議,我試過這個,havnt與ashx處理程序一起嘗試過使用web服務調用Json,但我沒有在Javascript中獲取任何數據這裏是我在Services.asmx中的所有內容 – Shokwave 2012-04-26 20:09:37

+0

@ Shokwave:我鼓勵你在相關細節上發佈另一個問題。所以人們會幫助你。 – Shyju 2012-04-26 20:36:43

+0

@Shokwave:使用螢火蟲/提琴手來查看正在進行的通話以及回覆的迴應。 – Shyju 2012-04-26 20:37:51

0
0

首先,這裏有一個重大的誤解。

Session存儲序列化字符串表示對象

Session["ErrorsTable"] = tblErrors; 

這是非常重要的,你明白tblErrors在C#代碼不等於

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

tblErrors是一個對象,而且它有一個類,就像任何其他C#類。 (釋義)當頁面由asp.net呈現發送給客戶端時,該類爲翻譯爲爲html。但是,如果您將該類的實例放入Session,那不是您將獲得的。您正在存儲實際的對象,其中Session爲您序列化和反序列化。

我希望這有助於我意識到這是一個難以解釋的話題。

1

創建一個HTML表添加行對於每個錯誤

實際上這條線Table tblErrors = new Table();創建System.Web.UI.WebControls.Table其是ASP.NET服務器側控制。

如果你真的想創建一個HTML表,你需要使用Render方法來生成HTML。這就是說我認爲你應該這樣做,因爲Shyju建議並從數據中移除演示文稿。