我想为Im试图做的最好的方法。我的数据库中有一个存储库,它确实可以从另一个数据库导入到我们的存储库中并链接信息。如果缺少链接信息,则会产生错误,用户必须解决。在我的代码隐藏中,我遇到了这些错误,我创建了一个html表,为每个错误添加行。现在,我想将此信息保留在多个页面上,因此我将其存储在会话中,因为它只是一个html表,而不是像网格这样的繁重控件,所以最好的方法是
以会话或任何其他方式存储HTML表,以及如何在客户端的Javascript或Jquery中访问它,以便可以利用Jquery函数显示可扩展的div,以显示此信息

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]");

        }
    }

最佳答案

如果您真的想保留会话中的错误以在页面上显示,那么我会这样做。除了创建HTML表并在会话中存储外,我将在Session中创建一个Errors列表并在需要时访问它,并以所需的任何格式显示它。它可以是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;
}


每当我想要这个时,我都会从Session中返回。我将其包装在一个函数中。

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方法并将其转换为JSon格式并返回。

这种方法的主要优点是Presentation并不与数据紧密联系。我们可以以各种样式显示错误消息。

关于javascript - 访问 session 中存储的html表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10336700/

10-10 07:44