0

私はImがやろうとしていることに最善のアプローチを取りたかったのです。別のデータベースから私たちのデータベースにインポートして情報をリンクする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]");

        }
    }
4

4 に答える 4

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;
}

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形式に変換して戻ります。

このアプローチの主な利点は、プレゼンテーションがデータに緊密に結び付けられていないことです。エラーメッセージはさまざまなスタイルで表示できます。

于 2012-04-26T15:53:31.853 に答える
1

エラーごとに行を追加するhtmlテーブルを作成します

実際、この行は、ASP.NETサーバー側のコントロールであるSystem.Web.UI.WebControls.TableTable tblErrors = new Table();を 作成します。

本当にHTMLテーブルを作成したい場合は、Renderメソッドを使用してHTMLを生成する必要があります。そうは言っても、 Shyjuが推奨するように実行し、データからプレゼンテーションを削除する必要があると思います。

于 2012-04-26T15:59:19.090 に答える
0

次のリンクを読むと、何を使用するかがわかります。セッションはメモリの観点からコストのかかる操作であり、大量のWebサイトがある場合は大きな問題になります。

http://msdn.microsoft.com/en-us/library/75x4ha6s.aspx

http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx

http://www.c-sharpcorner.com/UploadFile/freelance91/ASPNETstatemanagementtechniques01012007212655PM/ASPNETstatemanagementtechniques.aspx

http://www.dotnetfunda.com/articles/article61.aspx

http://www.codeproject.com/Articles/31994/Beginners-Introduction-to-State-Management-Techniq

于 2012-04-26T15:46:34.673 に答える
0

まず第一に、ここには大きな誤解があります。

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

Session["ErrorsTable"] = tblErrors;

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

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

tblErrorsはオブジェクトであり、他のc#クラスと同じようにクラスがあります。(言い換え)ページがasp.netによってレンダリングされてクライアントに送信されると、そのクラスはhtmlとして変換されます。ただし、クラスのインスタンスをに配置するとSession、それは得られません。Sessionシリアル化および逆シリアル化する実際のオブジェクトを保存しています。

これがお役に立てば幸いです。これは説明が難しいトピックだと思います。

于 2012-04-26T15:55:50.180 に答える