我尝试在页面首次加载时初始化包含gridview的usercontrol。当用户点击"搜索"然后我想在页面上显示该用户控件中的gridview。我尝试了一系列不同的方法来显示和隐藏用户控件。我尝试将usercontrol放在div中,然后使用style =" display:none"将div初始化为隐藏,然后在后面的代码中将样式更改为' block'。我尝试使用2个类,其中一个类的显示设置为无,另一个类的显示设置为阻止,然后根据用户点击"搜索"在这两个类之间切换。按钮。我尝试过使用Panel并将其可见性设置为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中的调用堆栈窗口并选择&#34;显示外部代码&#34;。我不确定我是否正确显示完整堆栈跟踪,如反对在默认情况下显示堆栈顶部的内容
App_Web_gjla55xr.dll!AdvancedSearch.btnSearch_Click(object sender,System.EventArgs e)第50行C# System.Web.dll!System.Web.UI.WebControls.Button.OnClick(System.EventArgs e)+ 0x77 bytes
System.Web.dll!System.Web.UI.WebControls.Button.RaisePostBackEvent(string eventArgument)+ 0x71 bytes
System.Web.dll!System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(string eventArgument)+ 0xb bytes
System.Web.dll!System.Web.UI.Page.RaisePostBackEvent(System.Web.UI.IPostBackEventHandler sourceControl,string eventArgument)+ 0xe bytes
System.Web.dll!System.Web.UI.Page.RaisePostBackEvent(System.Collections.Specialized.NameValueCollection postData)+ 0x25 bytes
System.Web.dll!System.Web.UI.Page.ProcessRequestMain(bool includeStagesBeforeAsyncPoint,bool includeStagesAfterAsyncPoint)+ 0x15bc bytes
System.Web.dll!System.Web.UI.Page.ProcessRequest(bool includeStagesBeforeAsyncPoint,bool includeStagesAfterAsyncPoint)+ 0x8d bytes
System.Web.dll!System.Web.UI.Page.ProcessRequest()+ 0x4f bytes System.Web.dll!System.Web.UI.Page.ProcessRequestWithNoAssert(System.Web.HttpContext context)+ 0x16 bytes
System.Web.dll!System.Web.UI.Page.ProcessRequest(System.Web.HttpContext context)+ 0x32 bytes
App_Web_gjla55xr.dll!ASP.advancedsearch_aspx.ProcessRequest(System.Web.HttpContext context)+ 0x33字节C# System.Web.dll!System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+ 0x65 bytes System.Web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep step,ref bool completedSynchronously)+ 0x4c bytes System.Web.dll!System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(System.Exception error)+ 0x13e bytes
System.Web.dll!System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext context,System.AsyncCallback cb,object extraData)+ 0xf8 bytes
System.Web.dll!System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest wr)+ 0x1a2 bytes System.Web.dll!System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest wr)+ 0x7d bytes
System.Web.dll!System.Web.HttpRuntime.ProcessRequest(System.Web.HttpWorkerRequest wr)+ 0x47 bytes
WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Request.Process()+ 0x17b bytes WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Host.ProcessRequest(Microsoft.VisualStudio.WebHost.Connection conn)+ 0x6c bytes
[Appdomain Transition]
WebDev.WebHost40.dll!Microsoft.VisualStudio.WebHost.Server.OnSocketAccept(object acceptedSocket)+ 0x83 bytes
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(对象状态)+ 0x2d字节 mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback callback,object state,bool ignoreSyncCtx)+ 0xb0 bytes
mscorlib.dll!System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()+ 0x5a bytes mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch()+ 0x147 bytes
mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()+ 0x2d bytes
[原生于管理过渡]
编辑:我解决了我的问题。我需要使用ajax更新面板包围用户控件,并将asyncpostbacktrigger连接到Search按钮单击事件。我还用另一个面板围绕用户控件,并将该面板的可见性从后面的代码设置为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>
答案 0 :(得分:4)
我相信所有ASP.NET WebForms控件的基类都是HtmlControl,它具有 Visible 属性。这会有用吗?:
divGrid.Visible = true;
答案 1 :(得分:1)
我找到了问题的答案。我必须使用更新面板包围用户控件,并将触发器设置为“搜索”按钮的单击事件。我还用一个面板包围了usercontrol,只是将visible设置为true / false。
答案 2 :(得分:1)
我实际上遇到了这个问题。我在Page_Load事件上使用divControl.Visible = false;
,它解决了购买神秘地代码破坏了我的页面格式。所以最后我在Page_Load事件上尝试了divControl.Style.Add("visibility", "hidden");
divControl.Style.Add("visibility", "visible");
在所需的方法上解决它而不是破坏页面格式。
答案 3 :(得分:0)
如果我没记错的话,我在一段时间内遇到了类似的问题,如果控件在页面加载时(或启动时的某个点)不可见,那么由于处理在某些时候不起作用。我现在还不太清楚细节。
解决问题的想法:
如果这些都不起作用,请发布完整的堆栈跟踪。