如何在c#后面的代码中显示隐藏的div

时间:2012-06-22 19:03:35

标签: c# asp.net html

我尝试在页面首次加载时初始化包含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>

4 个答案:

答案 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)

如果我没记错的话,我在一段时间内遇到了类似的问题,如果控件在页面加载时(或启动时的某个点)不可见,那么由于处理在某些时候不起作用。我现在还不太清楚细节。

解决问题的想法:

  • 使用jquery将其隐藏在文档就绪
  • 在“隐藏”时将元素的位置设置为屏幕,并将其移回到想要显示的位置时

如果这些都不起作用,请发布完整的堆栈跟踪。