我想为我想做的事情找到最好的方法。我在数据库中有一个sproc,它从另一个数据库导入到我们的数据库并链接信息。如果缺少链接信息,则会生成由用户解决的错误。在我的代码隐藏中,我收到了这些错误,我创建了一个为每个错误添加行的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]");
}
}
答案 0 :(得分: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;
}
每当我想要这个,我将从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方法并将其转换为JSS格式并返回。
此方法的主要优点是演示文稿与数据紧密相关。我们可以以各种样式显示错误消息。
答案 1 :(得分:1)
我创建了一个为每个错误添加行的html表
实际上,这一行Table tblErrors = new Table();
创建了一个System.Web.UI.WebControls.Table,它是一个ASP.NET服务器端控件。
如果您确实想要创建HTML表格,则需要使用Render
方法生成HTML。这就是说我认为你应该按Shyju建议并从数据中删除演示文稿。
答案 2 :(得分:0)
阅读以下链接,您将了解要使用的内容。从内存的角度来看,会话是一项代价高昂的操作,如果你有一个大容量的网站,这将是一个大问题。
http://msdn.microsoft.com/en-us/library/75x4ha6s.aspx
http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx
http://www.dotnetfunda.com/articles/article61.aspx
http://www.codeproject.com/Articles/31994/Beginners-Introduction-to-State-Management-Techniq
答案 3 :(得分:0)
首先,这里存在一个重大的误解。
Session
存储对象的序列化字符串表示。
Session["ErrorsTable"] = tblErrors;
了解您的c#代码中的tblErrors
不等于非常重要:
<table><tr><td>...</td></tr></table>
tblErrors
是一个对象,它有一个类,就像任何其他c#类一样。 (释义)当页面由asp.net呈现发送给客户端时,该类被翻译作为html。但是,如果您将类的实例放入Session
,那么这不是您将获得的。您正在存储实际对象,Session
为您序列化和反序列化。
我希望这有帮助,我意识到这是一个难以解释的话题。