1

私は検索コントロールを持っています。ユーザーが検索をクリックすると、クエリはURL(getモード)をコードビハインドから次の行で渡します。

 Server.Transfer("portfolio_search_results.aspx?search=" + query); 

今、私は非常に奇妙な問題を抱えています。ユーザーが検索ボタンをクリックしている場合、検索は正常に機能しますが、ユーザーがもう一度検索をクリックすると、エラーが発生します。

オブジェクト参照がオブジェクト インスタンスに設定されていません。

上げています。検索後に他のページに移動して再度検索すると正常に機能します。これは、検索ボタンを2回続けてクリックした場合にのみ発生します。検索コントロールは、マスター内のページの上部にあります。検索機能のコード:

    SqlCommand cmd = new SqlCommand("something", _mainConnection);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add(new SqlParameter("ID", SessionManager.Session[SessionParam.ID].ToString()));
    cmd.Parameters.Add(new SqlParameter("Type", type));
    return _mainDb.ExecuteDataSet(cmd).Tables[0];

エラーはセッションにあります。

Server.Transferの代わりにResponse.Redirectを使用している場合、それはまったく機能せず、最初の検索でも上記のエラーが発生します。

編集:スタックトレースを追加します。

Server Error in '/' Application.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:


[No relevant source lines]


Source File: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\e76777bb\bf0abb72\App_Web_portfolio_search_results.aspx.cdcab7d2.jiztmxz2.0.cs    Line: 0

Stack Trace:


[NullReferenceException: Object reference not set to an instance of an object.]
   Appeals.GetAppeals(String typeAppeals) +104
   search.make_dt() +21
   search..ctor() +311
   portfolio_search_results..ctor() +26
   ASP.portfolio_search_results_aspx..ctor() in c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\e76777bb\bf0abb72\App_Web_portfolio_search_results.aspx.cdcab7d2.jiztmxz2.0.cs:0
   __ASP.FastObjectFactory_app_web_portfolio_search_results_aspx_cdcab7d2_jiztmxz2.Create_ASP_portfolio_search_results_aspx() in c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\e76777bb\bf0abb72\App_Web_portfolio_search_results.aspx.cdcab7d2.jiztmxz2.1.cs:0
   System.Web.Compilation.BuildResultCompiledType.CreateInstance() +32
   System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert) +119
   System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) +33
   System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) +40
   System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) +160
   System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +93
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155


Version Information: Microsoft .NET Framework Version:2.0.50727.3634; ASP.NET Version:2.0.50727.3634 
4

2 に答える 2

1

デバッグモードでオブジェクトを1行ずつ診断することをお勧めします。例えば:

if (_mainConnection == null)
{
  throw new Exception("_mainConnection is null");
}

SqlCommand cmd = new SqlCommand("something", _mainConnection);
cmd.CommandType = CommandType.StoredProcedure;

if (string.IsNullOrEmpty(SessionParam.ID))
{
  throw new Exception("SessionParam.ID is null or empty");
}
else if (SessionManager.Session[SessionParam.ID] == null)
{
  throw new Exception("SessionManager.Session[SessionParam.ID] is null or empty");
}

cmd.Parameters.Add(new SqlParameter("ID", SessionManager.Session[SessionParam.ID].ToString()));


if (type == null)
{
  throw new Exception("type is null")
}

cmd.Parameters.Add(new SqlParameter("Type", type));

var res =  _mainDb.ExecuteDataSet(cmd);

if (res == null)
{
  throw new Exception("res is null")
}

if ((res.Tables == null) || (res.Tables.Length == 0))
{
  throw new Exception("tables is null or = 0")  
}

return res.Tables[0];

したがって、この方法で、エラーに関する詳細情報を受け取る必要があります。コードをうまく入力できるかどうかわからない-スペルエラーをチェックしなかった。主なアイデアは理解できると思います。

よろしく。

于 2012-12-17T12:52:08.863 に答える
0

App_codeクラス内のセッションパラメータを使用する代わりに、プロジェクトのApp_codeディレクトリ内のクラスにパラメータとしてセッションを渡すことで解決します。したがって、この調査では、セッションはapp_codeディレクトリでは使用されません。

于 2012-12-20T14:58:21.910 に答える