C# 如何在不刷新页面的情况下显示隐藏的占位符?

C# 如何在不刷新页面的情况下显示隐藏的占位符?,c#,asp.net,C#,Asp.net,我有两个占位符在一个页面,基本上我的要求是,我想显示另一个占位符,点击按钮,这是在第一个占位符,而不刷新页面 但当我点击第一个占位符中的按钮时,它会刷新页面,然后显示第二个占位符。如果无法通过占位符,我也愿意听到任何其他建议 有人能告诉我如何做到这一点吗 谢谢,使用UpdatePanel控件(MS ajax框架的一部分)或使用JavaScript。占位符必须呈现一个HTML元素,我不确定它是否呈现。如果没有,您可以使用面板,然后在JS中执行以下操作: function show() { var

我有两个占位符在一个页面,基本上我的要求是,我想显示另一个占位符,点击按钮,这是在第一个占位符,而不刷新页面

但当我点击第一个占位符中的按钮时,它会刷新页面,然后显示第二个占位符。如果无法通过占位符,我也愿意听到任何其他建议

有人能告诉我如何做到这一点吗


谢谢,

使用UpdatePanel控件(MS ajax框架的一部分)或使用JavaScript。占位符必须呈现一个HTML元素,我不确定它是否呈现。如果没有,您可以使用面板,然后在JS中执行以下操作:

function show() {
var panel = document.getElementById("<%= panel2.ClientID %>");
panel.style.display = "true";
}

<asp:Button id="btn1" runat="server" OnClientClick="show();return false;" />
函数显示(){
var panel=document.getElementById(“”);
panel.style.display=“true”;
}

HTH.

您可以在占位符周围包装一个updatepanel:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
    <ContentTemplate>
        <asp:PlaceHolder runat="server" ID="placeholder">hello</asp:PlaceHolder>
        </ContentTemplate>
        <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Button1" />
        </Triggers>
    </asp:UpdatePanel>
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />


这将生成部分回发(通过AJAX),因此仅更新updatepanel中的内容。在-部分中,我指定我的按钮将触发回发。

您可以按照建议使用
UpdatePanel
。只要确保
ContentTemplate
元素中存在两个占位符,就可以在不刷新整个页面的情况下在占位符之间切换

然而,这种便利是以控制为代价的。这不是对微软的攻击。大多数现成的解决方案也存在同样的问题

无论您选择什么路径,都需要一些东西来刷新当前页面的部分DOM。实际上,这意味着Javascript

占位符1中的操作是否更改占位符2的内容?如果没有,您可以同时渲染这两个对象,只需使用CSS使占位符2在加载时不可见。然后,您可以使用Javascript事件使其根据需要可见

如果占位符1上的操作确实影响占位符2,则上述解决方案将不起作用,因为您需要在显示占位符2之前确定占位符2将包含哪些内容


真正的问题是,您是否使用自己的Javascript(可能与成熟的js库(如mootools或jQuery)结合使用,并在过程中学习一些东西,或者使用ASP.NET AJAX工具快速解决问题,希望您不会遇到任何问题。

PlaceHolder不会呈现元素。此外,如果将某个内容设置为服务器端不可见,则它不会包含在DOM中,因此对客户端ID的引用将始终返回null。不,如果将其设置为不可见,则可以这样做。应该在最初的答复中包括这一点。我不认为占位符呈现了什么。。。必须使用面板。这看起来很好…但没有办法避免scriptmanager rite?事实上,我们现在还没有使用ajax…我有点不愿意为ajax做所有的设置…如果有其他方法可以实现这一点的话…?不,我很高兴没有scriptmanager就无法使用updatepanel,因为scriptmanager为您完成所有复杂的ajax工作。这就是我想要的。通过css隐藏并使用javascript显示似乎是个好主意…非常感谢。。。
protected void Page_Load(object sender, EventArgs e)
    {
        placeholder.Visible = false;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        placeholder.Visible = true;
    }