2012-04-26 5 views
0

나는 무엇을 하려는지 최선의 접근 방식을 원했습니다. 다른 데이터베이스에서 우리 데이터베이스로 가져 와서 정보를 링크하는 데이터베이스에 sproc이 있습니다. 링크 된 정보가 누락 된 경우 사용자가 오류를 생성합니다. 내 코드 비하인드에서 이러한 오류가 발생하고 각 오류에 대한 행을 추가하는 html 테이블을 만듭니다. 이제는 여러 페이지에 걸쳐이 정보를 유지하여 세션에서 저장하고 있습니다. html 테이블과 그리드와 같은 중장비 컨트롤이 아닌 가장 좋은 방법은 무엇입니까 세션 또는 다른 방법으로 HTML 테이블을 저장하는 방법 내가 클라이언트 측 자바 스크립트 또는 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; 
     } 
    } 

와 내가 자바 스크립트를 제외한 모든 I이를 얻기 위해 노력하고 있어요 방법입니다 표시 확장 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 테이블을 만들고 세션에 저장하는 대신 세션에서 오류 목록을 만들고 필요할 때마다 액세스하여 원하는 형식으로 표시 할 수 있습니다. 그것은, 스팬이 등 ...

는 단순히 대신 HTML 테이블 행을 만드는, 내 오류 메시지

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

및 코드에서 를 보유하는 클래스를 만들 것 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; 
} 

당신이 자바 스크립트에서이 원한다면, 당신은 jQuery를 아약스 /해서 getJSON을 사용하여 서버 페이지 (AN 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 당신의 좋은 제안 주셔서 감사합니다,이 노력하고 있습니다, ashx 처리기와 함께 일한 havnt는 webservice 전화와 함께 Json을 시도했지만 자바 스크립트에서 데이터를 다시 얻지 못하고 있습니다 여기에 내가 가지고있는 것입니다 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 권장하고 데이터에서 프레 젠 테이션을 제거해야한다고 생각했다.

관련 문제