我在一个页面中有两个占位符,基本上我的要求是我想在第一个占位符点击按钮时显示其他占位符而不刷新页面。
但是,当我点击第一个占位符中的按钮时,它会刷新页面,然后显示第二个占位符。如果通过占位符不可能,我也可以听到任何其他建议。
谁能告诉我如何实现这个目标?
谢谢,
答案 0 :(得分:2)
您可以按照建议使用UpdatePanel
。只要您确保PlaceHolders存在于ContentTemplate
元素中,您就可以在PlaceHolders之间切换,而不会刷新整个页面。
然而,这种便利是以控制为代价的。这不是对微软的打击。对于大多数现成的解决方案存在同样的问题。
无论您选择哪种路线,您都需要刷新当前页面DOM的 part 。实际上,这意味着Javascript。
PlaceHolder 1中的操作是否会更改PlaceHolder 2的内容?如果没有,你可以渲染两者,并简单地使用CSS使PlaceHolder 2在加载时不可见。然后,您可以根据需要使用Javascript事件使其可见。
如果PlaceHolder 1 上的操作影响PlaceHolder 2,则上述解决方案将无效,因为您需要在显示之前确定PlaceHolder 2将包含的内容。
真正的问题是你是否使用自己的Javascript(可能与mootools或jQuery等成熟的js库结合使用),也许在这个过程中学习一些东西,或者使用ASP .NET AJAX来快速解决问题,并希望你不要遇到任何问题。
答案 1 :(得分:1)
您可以在PlaceHolder周围打开更新面板:
<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" />
代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
placeholder.Visible = false;
}
protected void Button1_Click(object sender, EventArgs e)
{
placeholder.Visible = true;
}
这将生成部分回发(通过AJAX),因此只有我的updatepanel内的内容才会更新。在&lt; Triggers&gt; -section中,我指定我的Button将触发回发。
答案 2 :(得分:-1)
使用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;" />
HTH。