ページが最初にロードされたときに非表示としてグリッドビューを含むユーザーコントロールを初期化しようとしています。ユーザーがページの「検索」ボタンをクリックすると、そのユーザーコントロール内にあるグリッドビューを表示したいと思います。ユーザーコントロールを表示および非表示にするためのさまざまな方法を試しました。ユーザー コントロールを div に配置してから、style="display: none" を使用して div を非表示として初期化し、コード ビハインドでスタイルを「ブロック」に変更しようとしました。私は2つのクラスを使用して、1つのクラスを表示なしに設定し、もう1つのクラスを表示をブロックに設定し、ユーザーが「検索」ボタンをクリックすることに基づいてこれら2つのクラスを切り替えてみました。パネルを使用して、その可視性を true/false に設定しようとしましたが、しかし、ユーザーが [検索] ボタンをクリックした後に可視性を true に設定すると、パネルは表示されません。パネルとその可視性オプションを使用することを除いて、私が試したすべての方法で、次の例外が発生します。
{InnerText = '((System.Web.UI.HtmlControls.HtmlContainerControl)(divGrid)).InnerText' threw an exception of type 'System.Web.HttpException'}
これが私が使用しているコードで、このエラーの原因となっています:
マークアップ:
<div id="divGrid" runat="server">
<uc1:ContactsGridUserControl ID="ContactsGridUserControl1" runat="server" UpdateMode="Conditional"/>
</div>
<asp:Button ID="btnSearch" runat="server" Text="Search" Font-Size="Small" Height="30px"
Width="67px" ClientIDMode="Static" onclick="btnSearch_Click"></asp:Button>
コードビハインド:
protected void btnSearch_Click(object sender, EventArgs e)
{
//string redirect = CommonStrings.editContactPage;
bool bStatus = false;
try
{
bStatus = validateFields();
if (bStatus)
{
divGrid.Style["display"] = "block";
}
else
{
lblError.Text = "Please enter characters for at least one field below";
}
}
catch (Exception ex)
{
lblError.Text = "Exception: " + ex.ToString();
}
}
protected bool validateFields()
{
try
{
if ((txtbxFirstName.Text != null && txtbxFirstName.Text.Length > 0) ||
(txtbxLastName.Text != null && txtbxLastName.Text.Length > 0) ||
(txtbxPhoneNum.Text != null && txtbxPhoneNum.Text.Length > 0) ||
(txtbxCity.Text != null && txtbxCity.Text.Length > 0) ||
(txtbxZipCode.Text != null && txtbxZipCode.Text.Length > 0) ||
(txtDate1.Text != null && txtDate1.Text.Length > 0) ||
(txtDate2.Text != null && txtDate2.Text.Length > 0) ||
(txtbxCompanyName.Text != null && txtbxCompanyName.Text.Length > 0))
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
lblError.Text = "Exception: " + ex.ToString();
return false;
}
}
完全なスタック トレース: (Visual Studio 内で [コール スタック ウィンドウ] を右クリックし、[外部コードを表示] を選択しました。デフォルト)
App_Web_gjla55xr.dll!AdvancedSearch.btnSearch_Click(オブジェクト送信者, System.EventArgs e) 50 行目 C# System.Web.dll!System.Web.UI.WebControls.Button.OnClick(System.EventArgs e) + 0x77 バイト
System.Web.dll !System.Web.UI.WebControls.Button.RaisePostBackEvent(string eventArgument) + 0x71 バイト
System.Web.dll!System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(string eventArgument) + 0xbバイト
System.Web.dll!System.Web.UI.Page.RaisePostBackEvent(System.Web.UI.IPostBackEventHandler sourceControl, string eventArgument) + 0xe バイト
System.Web.dll!System.Web.UI.Page.RaisePostBackEvent(System. Collections.Specialized.NameValueCollection (postData) + 0x25 バイト
System.Web.dll!System.Web.UI.Page.ProcessRequestMain(bool includeStagesBeforeAsyncPoint、bool includeStagesAfterAsyncPoint) + 0x15bc バイト
System.Web.dll!System.Web.UI.Page.ProcessRequest(bool includeStagesBeforeAsyncPoint、bool includeStagesAfterAsyncPoint) + 0x8d バイト
System.Web.dll!System.Web.UI.Page.ProcessRequest() + 0x4f バイト System.Web.dll!System.Web.UI.Page.ProcessRequestWithNoAssert(System.Web.HttpContext コンテキスト) + 0x16 バイト
System.Web. dll!System.Web.UI.Page.ProcessRequest(System.Web.HttpContext コンテキスト) + 0x32 バイト
App_Web_gjla55xr.dll!ASP.advancedsearch_aspx.ProcessRequest(System.Web.HttpContext コンテキスト) + 0x33 バイト C# System.Web.dll!System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 0x65 バイト システム.Web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep ステップ、ref bool completedSynchronously) + 0x4c バイト System.Web.dll!System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(System.Exception エラー) + 0x13e バイト
System.Web.dll!System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext コンテキスト、System.AsyncCallback cb、オブジェクト extraData) + 0xf8 バイト
System.Web.dll!System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest wr) + 0x1a2 バイト System.Web.dll!System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest wr) + 0x7d バイト
システム。 Web.dll!System.Web.HttpRuntime.ProcessRequest(System.Web.HttpWorkerRequest wr) + 0x47 バイト
WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Request.Process() + 0x17b バイト WebDev.WebHost40.dll!Microsoft. VisualStudio.WebHost.Host.ProcessRequest(Microsoft.VisualStudio.WebHost.Connection conn) + 0x6c バイト
[Appdomain 遷移]
WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Server.OnSocketAccept(オブジェクトを受け入れたソケット) + 0x83 バイト
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(オブジェクトの状態) + 0x2d バイト+ 0xb0 バイト
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() + 0x5a バイト mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch() + 0x147 バイト
mscorlib.dll!System.Threading._ThreadPoolWaitCallback .PerformWaitCallback() + 0x2d バイト
[マネージド トランジションにネイティブ]
編集:私は私の問題に対する答えを解決しました。ユーザー コントロールを ajax 更新パネルで囲み、検索ボタンのクリック イベントに asyncpostbacktrigger を接続する必要がありました。また、ユーザー コントロールを別のパネルで囲み、そのパネルの可視性をコード ビハインドから true/false に設定します。
更新されたコード:
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:Panel ID="pnlGrid" Visible="false" runat="server">
<uc1:ContactsGridUserControl ID="ContactsGridUserControl1" runat="server" UpdateMode="Conditional"/>
</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSearch" EventName="Click" />
</Triggers>